日期:2014-05-17  浏览次数:20433 次

关于动态DataTable绑定GirdView的问题
各位,大家好,小弟有个问题想请教下,需求是用动态的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:设置gridview自增列属性
2:航绑定的时候,增加模板列,显示各单元格数据

第二种方法
可以通过js操作,单元格加上click事件,当点击后,当前单元格内容隐藏,增加一个textbox控件,显示单元格的值。最终通过js取得gridview所有数据,重新更新到数据库

------解决方案--------------------
让可编辑的列添加列 TemplateField
C# code
 <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>

------解决方案--------------------
前台声明一个runat="server" 的GridView,在后台动态绑定
C# code

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);
    }
}

------解决方案--------------------
BD啊。。。