У меня есть следующий код, в котором мне нужно привязать список объектов класса к datagridview. В этом классе одно поле является объектом некоторого другого класса, в котором снова есть несколько полей. Пожалуйста, обратитесь к этому коду.
public class Test
{
public string m_field1_Test { get; set; }
public string m_field2_Test { get; set; }
public string m_field3_Test { get; set; }
public string m_field4_Test { get; set; }
.
.
public string m_field100_Test{get; set;}
public Test1 test1obj;
public Test()
{
m_field1_Test = "field1";
m_field2_Test = "field2";
m_field3_Test = "field3";
m_field4_Test = "field4";
.
.
m_field100_Test = "field100";
test1obj = new Test1();
}
}
public class Test1
{
public string m_field1_Test1;
public string m_field2_Test1;
public string m_field3_Test1;
.
.
.
public string m_field30_Test1;
public Test1()
{
m_field1_Test1 = "field1_Test1";
m_field2_Test1 = "field2_Test1";
m_field3_Test1 = "field3_Test1";
.
.
.
m_field30_Test1 = "field30_Test1";
}
}
При нажатии кнопки Я привязываю список тестовых объектов к dataGridView. Код выглядит следующим образом.
private void Button2_Click(object sender, EventArgs e)
{
List<Test> listTest = new List<Test>();
Test obj;
for (int i = 0; i < 1000000; i++)
{
obj = new Test();
listTest.Add(obj);
}
label1.Text = listTest.Count().ToString();
dataGridView1.DataSource = listTest;
dataGridView1.BackgroundColor = Color.Beige;
}
Когда я выполняю эту большую часть, в поле datagridview появляются поле1 в поле4. Как я могу связать его таким образом, чтобы поля Test1 также отображались в datagridview в формате. Я хочу вывести что-то вроде этого.
field1 | field2 | field3| ....field100|field1_Test1 |field2_Test1|...field30_Test1
| | | | | |
| | | | | |
| | | | | |
Может кто-нибудь, пожалуйста, скажите мне, как реализовать эту функциональность?
Преобразование вашего listTest
в анонимный объект до его привязки откроет поля.
var dataSource = listTest.Select(l => new {field1 = l.m_field1_Test,
field2 = l.m_field2_Test,
field3 = l.m_field3_Test,
field4 = l.m_field4_Test,
field1_Test1 = l.test1obj.m_field1_Test1,
field2_Test1 = l.test1obj.m_field2_Test1,
field3_Test1 = l.test1obj.m_field3_Test1});
Это было бы лучше достигнуто в вашем цикле до 1000000, но я решил, что цикл до 1000000 - это не то, что вы сделали бы на производстве.
Если вы хотите исключить цикл for, вы можете сделать то же самое с Enumerable.Range
:
var dataSource = Enumerable.Range(0, 1000000).Select(...
Кроме того, просто совет, вы должны избегать ввода логики в обработчики событий. Потяните его в свой собственный метод, чтобы его можно было повторно использовать в других местах.
Test
наследовал отtest1
а не просто создавал его. Вы хотите, чтобыtest
имел свойстваtest1
?