首页 新闻 会员 周边 捐助

关于winForm程序 DataGridView控件数据源绑定DataSource.Set方法的一些疑问

0
[已解决问题] 解决于 2014-08-22 15:43
 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 }
View Code

为什么DataGridView需要和Form程序做关联才会自动绑定数据

猜想:1

DataGridView.DataSource.Set方法需要判定

 

DataGridView.Parrent 属性有值 且为一个Form?

如果我猜对了的话 请告诉我为什么这么做?

如果不是这么实现的话 谁来告诉我到底是怎么实现的?

额 暂时没有猜想2 了

额 表达的不好,希望能有人能理解我的疑问并给予解答

暗雾霾的主页 暗雾霾 | 菜鸟二级 | 园豆:360
提问于:2014-07-23 20:12
< >
分享
最佳答案
0

datagridview是一个winform控件,所有的winform控件都必须寄宿在winform中才能运行。

只有运行的winform控件,才有数据绑定的价值。

winform控件不一定要寄宿在winform中,也可以寄宿在其它winform控件类型(包括自定义的控件)的容器控件中,只要做到winform控件的根节点对象是一个form就好。

奖励园豆:5
519740105 | 大侠五级 |园豆:5810 | 2014-08-22 11:29
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册