Чтобы решить вашу проблему, вы должны установить имена полей ваших GridColumns в имена столбцов вашего DataTable.
Но я бы настоятельно рекомендовал использовать List<clsLineaTicket>
вместо того, чтобы преобразовывать это в DataTable.
Сначала у вас уже есть объект, и сетка может справиться с этим довольно хорошо. Поэтому преобразование этого в DataRows представляется ненужным. Не забывайте, что для любого объекта требуется пространство, а DataRow все еще является объектом.
Далее a List<clsLineaTicket>
предоставляет вам доступ к объектам вместо доступа DataRow. Это более читаемо и лучше для рефакторинга. Таким образом, вы можете легко переименовать свойство через рефакторинг. Но как переименовать столбец в DataTable? Иногда вы получаете доступ к строке ["ColumnName"]? Затем вы теряетесь, потому что магическая строка не может быть реорганизована. Позвольте мне показать небольшой пример для лучшего readablity из List<T>
:
Think вы в случае для двойного щелчка, и вы бы показать цену билета:
//This event is just a dummy and doesn't exists this way
private void grid_click(object sender, EventArgs e)
{
//DataTable access
var row = gridview.GetFocusedRow() as DataRowView;
MessageBox.Show(Convert.ToString(row["Price"]);
//List access
var lineaTicket = gridView.GetFocusedRow() as LineaTicket; //You directly see it's a ticket here
MessageBox.Show(lineaTicket.Price); //You don't need conversion
}
Другой Гуди является возможность Lambda и Linq. Вам нужен SubList с alle Tickets, который получил цену ниже 10 $?
List<clsLineaTicket> lowPriceTickets = ticketList.FindAll(ticket=>ticket.Price < 10);
Если вы используете Список, убедитесь, что ваши имена полей соответствуют Именам свойств. Если вы хотите сделать редактируемую сетку, вам также необходимо реализовать сеттер в своих свойствах.
Надеюсь, это поможет.
Любая причина, по которой вы не используете List как DataSource? На мой взгляд, лучше справиться. Еще раз попробуйте установить имена полей ваших GridColumns в имена столбцов. –
Sebi
@Sebi Я установил FieldNames, и теперь он отлично работает с DataTable, но я не могу заставить его работать с List. Любая идея заставить его работать? Почему лучше использовать List вместо DataTable? Спасибо! :) –
mrvinent
, если вы хотите использовать Список ваших Имена полей, должны соответствовать Именам свойств вашего объекта. Положительным в списке является то, что вы используете свои собственные объекты вместо DataRows. Таким образом, вы получаете доступ к значению через myObj.MyProperty вместо строки ["column"]. Это приносит вам некоторые преимущества в рефакторинге. Дальше это лучше для unittesting и читать легче. С Lambda и Linq вы можете легко фильтровать, сортировать, группировать и т. Д. Список. myList.FindAll (myObj => myObj.City.Contains («Нью-Йорк»), например. – Sebi