1 using System;
2 using System.Collections.Generic;
3 using System.Linq;
4 using System.Text;
5 using System.Windows.Forms;
6 using System.Data;
7 namespace TestDataGridView
8 {
9 class Program
10 {
11 static void Main(string[] args)
12 {
13 DataTable dt = InitDataTable();
14 //WinForm DataGridView控件 这是WinForm程序
15 System.Windows.Forms.DataGridView dgv = new System.Windows.Forms.DataGridView();
16 //方案一
17 Console.WriteLine("方案一");
18 dgv.AutoGenerateColumns = true;
19 dgv.DataSource = dt;
20 Console.WriteLine("dgv.ColumnCount={0}", dgv.ColumnCount);
21 Console.WriteLine("dgv.RowCount={0}", dgv.Rows.Count);
22 //方案二
23 Console.WriteLine("方案二");
24 dgv = new DataGridView();
25 foreach (DataColumn dc in dt.Columns)
26 {
27 DataGridViewColumn dgvc = new DataGridViewTextBoxColumn
28 {
29 HeaderText = dc.Caption,
30 DataPropertyName = dc.ColumnName,
31 Name = dc.ColumnName
32 };
33 dgv.Columns.Add(dgvc);
34 }
35 dgv.DataSource = dt;
36 Console.WriteLine("dgv.ColumnCount={0}", dgv.ColumnCount);
37 Console.WriteLine("dgv.RowCount={0}", dgv.Rows.Count);
38 //方案 三
39 Console.WriteLine("方案三");
40 dgv = new DataGridView();
41 Form frm = new Form();
42 foreach (DataColumn dc in dt.Columns)
43 {
44 DataGridViewColumn dgvc = new DataGridViewTextBoxColumn
45 {
46 HeaderText = dc.Caption,
47 DataPropertyName = dc.ColumnName,
48 Name = dc.ColumnName
49 };
50 dgv.Columns.Add(dgvc);
51 }
52 //疑问: frm.Controls.Add(dgv);这里发生了什么?
53 //为什么有了这句话 DataGridView设置数据源后就自动更新数据了?
54 frm.Controls.Add(dgv);
55 dgv.DataSource = dt;
56 Console.WriteLine("dgv.ColumnCount={0}", dgv.ColumnCount);
57 Console.WriteLine("dgv.RowCount={0}", dgv.Rows.Count);
58 Console.Read();
59 }
60 static DataTable InitDataTable()
61 {
62 DataTable dtTemp = new DataTable();
63 dtTemp.TableName = "dt";
64 dtTemp.Columns.AddRange(
65 new DataColumn[] {
66 new DataColumn{
67 ColumnName = "FirstColumnName",
68 Caption = "標題FirstColumnName"
69 },
70 new DataColumn{
71 ColumnName = "SecondColumnName",
72 Caption = "標題SecondColumnName"
73 }}
74 );
75 for (int i = 0; i < 10; i++)
76 {
77 DataRow dr = dtTemp.NewRow();
78 dr["FirstColumnName"] = "第" + i.ToString() + "行";
79 dr["FirstColumnName"] = "值:" + i.ToString();
80 dtTemp.Rows.Add(dr);
81 }
82 Console.WriteLine("DataTable 内数据");
83 Console.WriteLine("DataTable.ColumnCount={0}", dtTemp.Columns.Count);
84 Console.WriteLine("DataTable.RowCount={0}", dtTemp.Rows.Count);
85 return dtTemp;
86 }
87 }
88 }
为什么DataGridView需要和Form程序做关联才会自动绑定数据
猜想:1
DataGridView.DataSource.Set方法需要判定
DataGridView.Parrent 属性有值 且为一个Form?
如果我猜对了的话 请告诉我为什么这么做?
如果不是这么实现的话 谁来告诉我到底是怎么实现的?
额 暂时没有猜想2 了
额 表达的不好,希望能有人能理解我的疑问并给予解答
datagridview是一个winform控件,所有的winform控件都必须寄宿在winform中才能运行。
只有运行的winform控件,才有数据绑定的价值。
winform控件不一定要寄宿在winform中,也可以寄宿在其它winform控件类型(包括自定义的控件)的容器控件中,只要做到winform控件的根节点对象是一个form就好。