同一个gridView在不同条件下会绑定两个不同的dataTable,我如何实现这种绑定?比如一开始我设置了绑定列DataField=”id“,将第一个含有id 列的dataTable 成功绑定,但是在另一种情况下我要在将另一个dataTable的"name"绑定上去,但是怎样将DataField=”id“改为DataField=”name“?

解决方案 »

  1.   

    其实需求很简单,就是先从一个table里绑定,如果这个table的值经过各种条件筛选后,table 没有记录了,就从另外一张table里绑定,这两个table的结构截然不同。我想问一下,如果第一个table有8列(对应于gridView就是3个绑定列,5个模板列,下同),我在gridView中写了8个表达式,同时还设置了DataKeysName 的属性,但是第2个 table只有3个绑定列,这样绑定是否会报错?
      

  2.   

      this.GridView1.DataKeyNames = new string[] { "name" };
      

  3.   

    需求不是你做的过程,你的思路,而是你要达到的效果。
    像你这个说的,
    如果这个table的值经过各种条件筛选后,table   没有记录了,就从另外一张table里绑定,这两个table的结构截然不同。
    如果你贸然更改数据源,第二个表中根本就没有你在GritView中绑定的字段,怎么能不出错呢?
      

  4.   

    是可以的。所以需要datakeyNames
      

  5.   

    zhuanshen712  说的是我的意思,要想更改数据源,就要将他绑定的字段也一起更改,问题是怎么改?
    请huming_h  说得详细一点。datakeyNames 我已经设置好了!
      

  6.   

     this.GridView1.Columns.Clear();
    //第二个表绑定
     GridView1.DataSource=Table2;
     this.GridView1.AutoGenerateColumns = true;
    GridView1.DataBind();
      

  7.   

    谢谢 zhuanshen712 ,但是绑定列可以AutoGenerate,但是模板列怎么办?
      

  8.   

    依我看,这么麻烦的改造还不如将两个表的数据绑定到两个GridView,利用显示和隐藏来做呢。
      

  9.   

     protected void Button1_Click(object sender, EventArgs e)
        {
            
            this.GridView1.DataKeyNames = new string[] { "id"};
            DataTable dt = new DataTable();
            dt.Columns.Add(new DataColumn("id"));
            dt.Columns.Add(new DataColumn("name"));
            for (int i = 0; i < 10; i++)
            {
                DataRow row = dt.NewRow();
                row[0] = i.ToString();
                row[1] = i.ToString() + i.ToString();
                dt.Rows.Add(row);
            }
            this.GridView1.DataSource = dt;
            this.GridView1.DataBind();
        }
        protected void Button2_Click(object sender, EventArgs e)
        {
            this.GridView1.Columns.Clear();
            this.GridView1.DataKeyNames = new string[] { "name" };
            DataTable dt = new DataTable();
            dt.Columns.Add(new DataColumn("name"));
            dt.Columns.Add(new DataColumn("sex"));
            for (int i = 0; i < 10; i++)
            {
                DataRow row = dt.NewRow();
                row[0] = i.ToString()+i.ToString();
                row[1] = i.ToString() + i.ToString()+i.ToString();
                dt.Rows.Add(row);
            }
            this.GridView1.DataSource = dt;
            this.GridView1.DataBind();
        }
    以上是我两个button的事件,分别绑定不同的两张表,第一张表里可以有模版列,就是在gridview里面设置好的模板,如果第二张表也需要用到模板列,比较麻烦一点。
      

  10.   

    谢谢 huming_h ,
    但是 我点击button 2 后再也绑定不了 button1.
    其实我的问题就是如何用代码给gridView 添加 模板列!
      

  11.   

    很简单啊  你给id和name在sql去相同的别名d 然后你根据需要选择不同的  sql就可以了