Мне нужно реализовать пользовательский элемент управления с помощью datatable или что-то, что вы предлагаете для разной длины столбца, и оно должно быть отзывчивым. Каждая строка в этой таблице содержит не менее 3 столбцов, и максимальное количество столбцов не должно превышать. Например, первая строка имеет 3 столбца, вторая строка имеет 5 столбцов, третья строка - 12 столбцов. Однако я не знаю максимальную длину столбца для одной строки. Я думал, что с помощью данных таблицы выгодно какКак представить данные в элементе управления с разными столбцами в каждой строке?
DataTable dt = new DataTable();
dt.Columns.Add("first column", typeof(string));
dt.Columns.Add("second column", typeof(string));
dt.Columns.Add("third column", typeof(List<string>));
DataRow dr = dt.NewRow();
dr[0] = "1";
dr[1] = "a";
dr[2] = new List<string>(){ "a","b","c","d"};
dt.Rows.Add(dr);
dr = dt.NewRow();
dr[0] = "2";
dr[1] = "c";
dr[2] = new List<string>() { "a", "b", "c"};
dt.Rows.Add(dr);
dr = dt.NewRow();
dr[0] = "3";
dr[1] = "d";
dr[2] = new List<string>() { "a", "b", "c","d","e" };
dt.Rows.Add(dr);
gridControl1.DataSource = dt;
Я использовал DevExpress GridView и я вижу ниже
.
Но я не хочу этого видеть. Есть ли какой-либо элемент управления, который может представлять эти данные, например ?
Заранее благодарен!
Одна возможность состоит в том, чтобы использовать DataGridView с одного столбца, значения которого конкатенация элементов списка (например, «a; b; c» или «a; b; c; d; d; f») и обрабатывать событие CellPainting DataGridView для рисования строк и соответствующих границ между ними. – Graffito
Спасибо за ваш ответ. Я думал, что ваше решение, но b c d или т. Д., Также должно быть доступно для просмотра. – gokberk
Используйте событие CellMouseDown DataGridView и выведите из e.X логическую ячейку. Когда вы рисуете «объединенную» ячейку или обрабатываете событие Cell MouseDown, используйте TextRenderer.Measure String(), чтобы настроить ширину «логических» ячеек или вывести «щелкнув» элемент. – Graffito