GridView动态进行行添加和删除
2013-10-30 09:51
239 查看
出处:http://www.cnblogs.com/shenzhoulong/
gridview动态添加行的原理就是用datatable增加新列然后重新绑定;
设计源码
设计gridview代码
首先我们需要在初始化的时候,新建table并同时新建一个列,以便在初始化的时候就有一个新列可使用
如果初始化的时候需要给某列进行赋值,比如当前时间和当前用户,可以给第一行的值赋值,同时我们需要把建立好的datatable结构给viewstate或者session以便我们后续的新加行,删除等操作,有了上面的代码后我们在初始化的时候就能看到我们设计的界面,同时会有一个新行已经初始化
点击新增行按钮
这里我们首先要得到我们在初始化的时候建立的datatable数据结构,然后我们获得用户填写的数据,这里主要是因为,当用户修改数据时我们可以动态的获取用户修改的值,避免用户新增加一行保存一行所带来的不便。把数据保存到datatable中后我们再添加一个新行,同样,有一些初始值我们需要给初始化出来,再新添加行之后,我们需要把数据结构赋给viewstate或者session然后和gridview绑定,这样动态新增行就搞定了;
好吧再来一个动态删除行的code,如下
这里是我们首先要找到gridview中能唯一标示这行数据的值,然后获得datatable的数据结构,再根据gridview数据行的唯一标示在datatable中循环,如果某行中的某个字段的值行gridview中的行唯一标示相等,则移除当前行,同样把修改后的数据结构绑定给viewstate或者session,然后重新绑定;
总体就是在初始化的时候需要把数据结构的建立起来,并新建一行,并把数据结构给viewstate或者session,然后如果做其他操作就需要先活动这个数据结构,再做其他的修改,同样做完修改后需要把新的数据结构赋给viewstate或者session,以便实时更新viewstate或者session,然后绑定。
gridview动态添加行的原理就是用datatable增加新列然后重新绑定;
设计源码
设计gridview代码
<asp:GridView ID="gvFrontendTypeSetting" runat="server" AutoGenerateColumns="false" CssClass="table" OnRowDeleting="gvFrontendTypeSetting_RowDeleting"> <Columns> <asp:TemplateField HeaderText="序号"> <ItemTemplate> <div align="center"> <asp:TextBox ID="txtSerialNumber" runat="server" Width="20px" Text='<%#Eval("serialNumber")%>' BorderStyle="None"></asp:TextBox> </div> </ItemTemplate> </asp:TemplateField> <asp:TemplateField HeaderText="商品筛选类型"> <ItemTemplate> <asp:TextBox ID="txtType" runat="server" Text='<%#Eval("type")%>' BorderStyle="None"></asp:TextBox> </ItemTemplate> <ItemStyle Width="100px" /> </asp:TemplateField> <asp:TemplateField HeaderText="修改时间"> <ItemTemplate> <div align="center"> <asp:Label runat="server" ID="lblModificationTime" Text='<%#Eval("modifiedTime")%>' BorderStyle="None"></asp:Label> </div> </ItemTemplate> </asp:TemplateField> <asp:TemplateField HeaderText="修改人"> <ItemTemplate> <div align="center"> <asp:Label runat="server" ID="lblModificationName" Text='<%#Eval("modifiedName")%>' BorderStyle="None"></asp:Label> </div> </ItemTemplate> </asp:TemplateField> <asp:TemplateField HeaderText="操作"> <ItemTemplate> <div align="center"> <asp:Button ID="btnDel" runat="server" Text="删除" CommandName="delete" /> <asp:Button ID="btnEdit" runat="server" Text="修改" CommandName="Edit" /> </div> </ItemTemplate> </asp:TemplateField> </Columns> </asp:GridView>
首先我们需要在初始化的时候,新建table并同时新建一个列,以便在初始化的时候就有一个新列可使用
/// <summary> /// Init the gvFrontendTypeSetting to show /// </summary> private void InitGVFrontendTypeSetting() { //Create a datatable instance DataTable tbScratchCard = new DataTable(); //column one DataColumn colSerialNumber = new DataColumn(); colSerialNumber.DataType = System.Type.GetType("System.Int32"); colSerialNumber.ColumnName = "serialNumber"; //column two DataColumn colType = new DataColumn(); colType.DataType = System.Type.GetType("System.String"); colType.ColumnName = "type"; //column three DataColumn colModifiedTime = new DataColumn(); colModifiedTime.DataType = System.Type.GetType("System.DateTime"); colModifiedTime.ColumnName = "modifiedTime"; //column four DataColumn colModifiedName = new DataColumn(); colModifiedName.DataType = System.Type.GetType("System.String"); colModifiedName.ColumnName = "modifiedName"; //DataColumnCollection DataColumn[] cols = { colSerialNumber, colType, colModifiedTime, colModifiedName }; //Add columns to the table tbScratchCard tbScratchCard.Columns.AddRange(cols); //Add a new row to the table tbScratchCard tbScratchCard.Rows.Add(tbScratchCard.NewRow()); tbScratchCard.Rows[0]["serialNumber"] = tbScratchCard.Rows.Count - 1; tbScratchCard.Rows[0]["modifiedTime"] = DateTime.Now; tbScratchCard.Rows[0]["modifiedName"] = ((User)Session["user"]).AccountName; ViewState["tbCategory"] = tbScratchCard; //Bind the table to the gridview gvFrontendTypeSetting.DataSource = tbScratchCard; gvFrontendTypeSetting.DataBind(); }
如果初始化的时候需要给某列进行赋值,比如当前时间和当前用户,可以给第一行的值赋值,同时我们需要把建立好的datatable结构给viewstate或者session以便我们后续的新加行,删除等操作,有了上面的代码后我们在初始化的时候就能看到我们设计的界面,同时会有一个新行已经初始化
点击新增行按钮
/// <summary> /// 添加行 /// </summary> /// <param name="sender"></param> /// <param name="e"></param> protected void btnAddType_Click(object sender, EventArgs e) { DataTable tbCategory = (DataTable)ViewState["tbCategory"]; for (int i = 0; i <= tbCategory.Rows.Count - 1; i++) { tbCategory.Rows[i]["serialNumber"] = Convert.ToInt32(((TextBox)gvFrontendTypeSetting.Rows[i].Cells[0].FindControl("txtSerialNumber")).Text); tbCategory.Rows[i]["type"] = ((TextBox)gvFrontendTypeSetting.Rows[i].Cells[0].FindControl("txtType")).Text; tbCategory.Rows[i]["modifiedTime"] = ((Label)gvFrontendTypeSetting.Rows[i].Cells[0].FindControl("lblModificationTime")).Text; tbCategory.Rows[i]["modifiedName"] = ((Label)gvFrontendTypeSetting.Rows[i].Cells[0].FindControl("lblModificationName")).Text; } //Add new row tbCategory.Rows.Add(tbCategory.NewRow()); tbCategory.Rows[tbCategory.Rows.Count - 1]["serialNumber"] = tbCategory.Rows.Count - 1; tbCategory.Rows[tbCategory.Rows.Count - 1]["modifiedTime"] = DateTime.Now; tbCategory.Rows[tbCategory.Rows.Count - 1]["modifiedName"] = ((User)Session["user"]).AccountName; ViewState["tbCategory"] = tbCategory; //Bind the table to the gridview gvFrontendTypeSetting.DataSource = tbCategory; gvFrontendTypeSetting.DataBind(); }
这里我们首先要得到我们在初始化的时候建立的datatable数据结构,然后我们获得用户填写的数据,这里主要是因为,当用户修改数据时我们可以动态的获取用户修改的值,避免用户新增加一行保存一行所带来的不便。把数据保存到datatable中后我们再添加一个新行,同样,有一些初始值我们需要给初始化出来,再新添加行之后,我们需要把数据结构赋给viewstate或者session然后和gridview绑定,这样动态新增行就搞定了;
好吧再来一个动态删除行的code,如下
/// <summary> /// 删除 /// </summary> /// <param name="sender"></param> /// <param name="e"></param> protected void gvFrontendTypeSetting_RowDeleting(object sender, GridViewDeleteEventArgs e) { int number =Convert.ToInt32(((TextBox)gvFrontendTypeSetting.Rows[e.RowIndex].FindControl("txtSerialNumber")).Text); DataTable tbCategory = (DataTable)ViewState["tbCategory"]; for (int i = 0; i <= tbCategory.Rows.Count - 1; i++) { if (Convert.ToInt32(tbCategory.Rows[i]["serialNumber"])==number) { tbCategory.Rows.RemoveAt(i); } } ViewState["tbCategory"] = tbCategory; gvFrontendTypeSetting.DataSource = tbCategory; gvFrontendTypeSetting.DataBind(); }
这里是我们首先要找到gridview中能唯一标示这行数据的值,然后获得datatable的数据结构,再根据gridview数据行的唯一标示在datatable中循环,如果某行中的某个字段的值行gridview中的行唯一标示相等,则移除当前行,同样把修改后的数据结构绑定给viewstate或者session,然后重新绑定;
总体就是在初始化的时候需要把数据结构的建立起来,并新建一行,并把数据结构给viewstate或者session,然后如果做其他操作就需要先活动这个数据结构,再做其他的修改,同样做完修改后需要把新的数据结构赋给viewstate或者session,以便实时更新viewstate或者session,然后绑定。
相关文章推荐
- eclipse中svn的各种状态图标详解
- MySQL 开启与关闭远程访问
- JNI
- RTAI和EMC2在 ubuntu 10.04.3上的安装
- 2014找工笔试之睿初科技
- 第二遍C++primer->C风格字符串
- 罪人我举起酒杯的飞鸽传书
- windows 下远程拷贝文件
- Nginx支持Nagios相关配置
- JAVA求余--%
- (高精度运算4.7.26)POJ 1220 NUMBER BASE CONVERSION(高精度数的任意进制的转换——方法:ba1----->10进制----->ba2)
- iostream中文问题
- 关于win7设置环回接口和安装找不到指定文件的解决方法
- struts 3种从jsp页面 取值方式
- 大数据处理技术 - 基于Hadoop的实战
- Avoiding duplicate session detected errors in LCDS (and BlazeDS)
- 中国人终生受用的70个神秘偏方(一)
- dbms_space 显示自动段顾问建议!
- 五分钟学会HTML5!(一)
- org.apache.catalina.mbeans.ServerLifecycleListener