各位,大家好,小弟有个问题想请教下,需求是用动态的DataTable绑定GridView,因为DataTable中行列的值会改变,所以GridView中行列会随着DataTable的变化而变化,举个简单的例子,有4个表,分别是年级表(字段主键年级)、课程表(字段主键课程、年级<=外键)、学期表(字段主键学期、课名、年级<=外键)、课时表(字段主键课时、课程<=外键、课名<=外键)假设一年级有课程语文、数学,语文课是lession1(课时1)、lession2(课时2),数学课是lession1(课时3)、lession2(课时3)、lession3(课时2);二年级有语文、数学、英语,语文的课是lession1(课时1)、lession2(课时1),数学课是lession1(课时1)、lession2(课时2)、lession3(课时3),英语课是lession1(课时1),这样构造出来的GridView就是年级(这是个下拉菜单,选择年级:如,一年级、二年级),根据选中下拉项会改变gridView,如下所示一年级的GridView
课程名称  语文   数学   英语
lession1   1      3
lession2   2      3
lession3          2二年级的GridView
课程名称  语文   数学   英语
lession1   1      1      1
lession2   1      2
lession3          3 现在我已经构造出来这个GridView,现在的难题是如何让GridView的单元格可编辑,就是单元格里边的数字点击后就可以编辑,我在网上也看了相关的例子,但是这些例子GridView都是有固定列的,可以在前台aspx页面的GridView中绑定,就是<ItemPlate>Label</ItemPlate><EditPlate>TextBox</EditPlate>,但是我构造的GridView都是动态DataTable生成的,只能在后台写,这块就卡住了,请各位看看有什么好的建议,先谢谢了!

解决方案 »

  1.   

    1:设置gridview自增列属性
    2:航绑定的时候,增加模板列,显示各单元格数据第二种方法
    可以通过js操作,单元格加上click事件,当点击后,当前单元格内容隐藏,增加一个textbox控件,显示单元格的值。最终通过js取得gridview所有数据,重新更新到数据库
      

  2.   

    让可编辑的列添加列 TemplateField   <asp:TemplateField HeaderText="列名">
                                                                                                                  <ItemTemplate>
                                                                 <asp:Label ID="Label1" runat="server" 
                                                                     Text='<%# Eval("后台绑定的列") %>'></asp:Label>
                                                                 <asp:TextBox ID="TextBox1" runat="server" CssClass="ssTextBox" 
                                                                     Text='<%# Eval("后台绑定的列") %>' visible="false" TextMode="MultiLine"></asp:TextBox>
                                                             </ItemTemplate>
                                                             <ItemStyle CssClass="ssCell" />
                                                         </asp:TemplateField>
     label显示  text编辑
      

  3.   

    前台声明一个runat="server" 的GridView,在后台动态绑定if (ds1.Tables[0].Rows.Count > 0)
    {
       for (int i = 0; i < 5; i++)
       {
        DataGridViewTextBoxColumn text = new DataGridViewTextBoxColumn();
        text.Width = 80;
        text.Name = ds1.Tables[0].Columns[i].ColumnName;
        text.DataPropertyName = ds1.Tables[0].Columns[i].ColumnName;
        dataGridView1.Columns.Add(text);
        }
    }int rowNum = dataGridView1.Rows.Count;//取dataGridView1行数,同理也可以取到列数,然后就看你要开始判断提交那个单元格了
      

  4.   


    int rowNum = dataGridView1.Rows.Count;
    for (int i = 0; i < rowNum - 1; i++)
    {
       for (int j = 0; j < dataGridView1.Rows[i].Cells.Count; j++)
       {
         if (dataGridView1.Rows[i] != null && dataGridView1.Rows[i].Cells[j] != null)
         {
          if (dataGridView1.Rows[i].Cells[j].Value != null)
          {
            string StrNum = dataGridView1.Rows[i].Cells[j].Value.ToString();
            if (StrNum != "" && StrNum != "0")
            {
               //存入数据库
            }
            else
            {
                MessageBox.Show("请输入药品数量", "系统提示");
            }
          }
        }
      }
    }
      

  5.   

    这是winform的代码,在BS程序中,也可以这样实现的