У меня есть дефолтный список людей.
humans = new List<Human>
{
new Human{ Name="Вася", Sex = Sex.Male ,Item = Item.Чайная},
new Human{ Name="ВаНЯ", Sex = Sex.Male ,Item = Item.Чайная}
};
public class Human
{
public string Name { get; set; }
public int Count { get; set; }
public Sex Sex { get; set; }
public Item Item {get;set;}
}
Список используется на всех вкладках утилиты отображая по Sex нужные имена(чекбоксы)
Заполняю я ее так
dataGridView1.DataSource = humans;
Юзер вводит нужное количество ложек на каждой нужной вкладке. На выходе мне нужно получать файлы.txt.
Каждый файл соответствует вкладке. Внутри будут строки: ( имя повторяется введенное количество раз)
чайная.txt
Наконец Вопрос =)
Нужно использовать несколько datagridview для каждой вкладки? И заполнять каждый dataGridView из humans .И потом каждую выгружать в имя_вкладки.txt.
Я слышал, что отделение данных от представления хорошая практика.
И понял что мои манипуляции в dataGridView , копирование, изменение Cells.Value итд не совсем верное решение.
Тогда я решил что мне надо работать с Datatable и просто добавлять в неё при переходе на новую вкладку новые строки, копируя уже существующие с item = чайная меняя сам Item на столовую в новых, если таковых нет.
И к событию выбора вкладки Столовая
var result = humans.Where(x => x.Item == Item.Столовая)
dataGridView1.DataSource = humans;
Таким образом на каждой вкладке будут отображаться только чайные. либо столовые.Хотя данные все лежат в одной таблице.Кажется это удобно.
И мне будет легко копировать целые строки, или менять значения ячейки...
Но я не знаю как из GridView.DataSource в DataTable эти данные экспортировать.
Я пробовал DataTable tbl = Gridview1.DataSource as DataTable;
Но получаю Null.
Работать с humans очевидно менее удобно.
Может сразу заполнять из humans DataTable а потом уже указывать ее к DataSource.(Как тогда сделать это?)
А может я вообще изобретаю велосипед.. Как лучше делать?
Пока помогло это
public class ListtoDataTableConverter
{
public DataTable ToDataTable<T>(List<T> items)
{
DataTable dataTable = new DataTable(typeof(T).Name);
PropertyInfo[] Props = typeof(T).GetProperties(BindingFlags.Public | BindingFlags.Instance);
foreach (PropertyInfo prop in Props)
{
dataTable.Columns.Add(prop.Name);
}
foreach (T item in items)
{
var values = new object[Props.Length];
for (int i = 0; i < Props.Length; i++)
{
values[i] = Props[i].GetValue(item, null);
}
dataTable.Rows.Add(values);
}
return dataTable;
}
}
ListtoDataTableConverter converter = new ListtoDataTableConverter();
DataTable dt = converter.ToDataTable(humans);
Айфон мало держит заряд, разбираемся с проблемой вместе с AppLab
Перевод документов на английский язык: Важность и ключевые аспекты
Нужно обработать клик мыши с зажатой клавишей, к примеру CTRL, по элементу управления КнопкаЯ так понимаю, обрабатываться всё же будем в обработчике...
ЗдравствутйеВозник вопрос, так как я чайник, то решил обратиться к вам
Есть таблица записей с полями datetime(Int) и status(Smallint)Статус может быть 1 - Успех, 2 - Отказ