Для применения фильтрации на самом контролле (не в модели данных) использую DataTable для создания таблицы и DataView.
Проблема: после применения фильтра btn_Filter_Click
и после применения сортировки (нажатие на колонку) значение dgv_TrainTable.Rows[i]
сбрасывается.
dgv_TrainTable.Rows[i].Tag = null
dgv_TrainTable.Rows[i].DefaultCellStyle.BackColor = цвет по умолчанию
public partial class Form1 : Form
{
public List<TableRec> TableRecs { get; set; } = new List<TableRec>
{
new TableRec { Id = 1, Number = "558", ArrivalTime = "00:07", DepartureTime = "00:30", Route = "Череповец-Адлер", DaysFollowing = "Выборочные дни: Май:26"},
new TableRec { Id = 2, Number = "516", ArrivalTime = "00:17", DepartureTime = "01:30", Route = "Сыктывкар-Адлер", DaysFollowing = "Выборочные дни: Движение отсутсвует"},
new TableRec { Id = 3, Number = "698", ArrivalTime = "13:07", DepartureTime = "14:30", Route = "Кострома-Москва", DaysFollowing = "Выборочные дни: Ежедневно"},
new TableRec { Id = 4, Number = "496", ArrivalTime = "14:07", DepartureTime = "15:30", Route = "Архангельск-Адлер", DaysFollowing = "Выборочные дни: Ежедневно"},
new TableRec { Id = 5, Number = "386", ArrivalTime = "15:07", DepartureTime = "17:55", Route = "Череповец-Адлер", DaysFollowing = "Выборочные дни: Движение отсутсвует"},
new TableRec { Id = 4, Number = "666", ArrivalTime = "14:07", DepartureTime = "15:30", Route = "Архангельск-Москва", DaysFollowing = "Выборочные дни: Ежедневно"},
};
public DataTable DataTable { get; set; }
public DataView DataView { get; set; }
public Form1()
{
InitializeComponent();
CreateDataTable();
}
private void CreateDataTable()
{
//Создание таблицы
DataTable = new DataTable("MAIN_TABLE");
List<DataColumn> columns = new List<DataColumn>
{
new DataColumn("Id", typeof(int)),
new DataColumn("Номер", typeof(string)),
new DataColumn("ВремяПрибытия", typeof(string)),
new DataColumn("ВремяОтправления", typeof(string)),
new DataColumn("Маршрут", typeof(string)),
new DataColumn("ДниСледования", typeof(string))
};
DataTable.Columns.AddRange(columns.ToArray());
DataView = new DataView(DataTable);
dgv_TrainTable.DataSource = DataView;
//форматирование колонок DataGridView----------------------------
for (int i = 0; i < dgv_TrainTable.Columns.Count; i++)
{
var col = dgv_TrainTable.Columns[i];
col.AutoSizeMode = DataGridViewAutoSizeColumnMode.Fill;
switch (col.Name)
{
case "Id":
col.HeaderText = @"Id";
break;
case "Номер":
col.HeaderText = @"Номер";
break;
case "ВремяПрибытия":
col.HeaderText = @"Время прибытия";
break;
case "ВремяОтправления":
col.HeaderText = @"Время отправления";
break;
case "Маршрут":
col.HeaderText = @"Маршрут";
break;
case "ДниСледования":
col.HeaderText = @"Дни следования";
break;
}
}
}
protected override void OnLoad(EventArgs e)
{
//Заполнение данными
DataTable.Rows.Clear();
for (var i = 0; i < TableRecs.Count; i++)
{
var rec = TableRecs[i];
var row = DataTable.NewRow();
row["Id"] = rec.Id;
row["Номер"] = rec.Number;
row["ВремяПрибытия"] = rec.ArrivalTime;
row["ВремяОтправления"] = rec.DepartureTime;
row["Маршрут"] = rec.Route;
row["ДниСледования"] = rec.DaysFollowing;
DataTable.Rows.Add(row);
dgv_TrainTable.Rows[i].DefaultCellStyle.BackColor = Color.LightGreen; //!!! создаю настройки для строк
dgv_TrainTable.Rows[i].Tag = rec.Id;
}
base.OnLoad(e);
}
//Применение фильтра
private void btn_Filter_Click(object sender, EventArgs e)
{
string filter= String.Empty;
if (!(string.IsNullOrEmpty(tb_НомерПоезда.Text) || string.IsNullOrWhiteSpace(tb_НомерПоезда.Text)))
{
filter = $"Номер = '{tb_НомерПоезда.Text}'";
}
DataView.RowFilter = filter;
}
}
Айфон мало держит заряд, разбираемся с проблемой вместе с AppLab
Перевод документов на английский язык: Важность и ключевые аспекты
Как залить свою программу наNET Fiddle ? Или там можно только что-то писать онлайн?
I create new PDF documentHow add new page into itextsharp document? I use this and get an error: Unbalanced begin/end text operators
Помогите реализовать такую идею: Ввожу в textbox1 определенный код и при нажатии на кнопку он выполняетсяИдеи с if(