利用GridView显示主细表并一次编辑明细表所有数据的例子

来源:互联网 发布:淘宝代运营销售怎么样 编辑:程序博客网 时间:2024/05/22 15:55

前几天写了一个利用GridView显示主细表的例子,有网友询问如何一次编辑明细表数据所有数据?其实,如果对ASP.NET或者HTML比较熟悉的话,这种批量编辑数据的功能很容易实现。下面的例子使用隐藏表单域记录数据的标识id,对每个输入框的名字附加id信息,这样的话,数据对应起来比较简单。

aspx:

<%@ Page Language="C#" ValidateRequest="false" AutoEventWireup="true" EnableViewState="true" CodeFile="Default2.aspx.cs" Inherits="Default2" %><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head id="Head1" runat="server"> <title>利用GridView显示主细表并一次编辑明细表所有数据的例子</title> td,div,a {font-size:12px} </head><body> <form id="form1" runat="server"> <Columns> <ItemTemplate> <div style="width: 100%; padding: 2px; font-weight: bold; background-color: #DEDEDE; float: left"> <span style="float: left">栏目名称:<%#Eval("Title") %></span><span style="float: right; color: Red; cursor: pointer" onclick="ShowHidden('<%#Eval("id") %>',event)">隐藏</span></div> <div style="background-color: #FFF; padding-left: 60px; clear: both" id="div<%#Eval("id") %>"> <HeaderStyle BackColor="#9999FF" /> <Columns> <ItemTemplate> <input name="guid" value="<%#Eval("id") %>" type="hidden" /> <input name="Title<%#Eval("id") %>" value="<%#Eval("Title") %>" style="width: 100%;border:1px solid gray" /> </ItemTemplate> </asp:TemplateField> <ItemTemplate> <input name="Date<%#Eval("id") %>" value="<%# ((DateTime)Eval("CreateDate")).ToString("yyyy-MM-dd") %>" style="border:1px solid gray"/> </ItemTemplate> </asp:TemplateField> </Columns> </asp:GridView> </div> </ItemTemplate> </asp:TemplateField> </Columns> </asp:GridView> </form></body></html>

C#:

using System;using System.Data;using System.Configuration;using System.Collections;using System.Web;using System.Web.Security;using System.Web.UI;using System.Web.UI.WebControls;using System.Data.OleDb;using System.Web.UI.HtmlControls;public partial class Default2 : System.Web.UI.Page{ string ConnectionString = @"Provider=Microsoft.Jet.OLEDB.4.0;Data Source=|DataDirectory|/aspxWeb.mdb;Persist Security Info=True"; OleDbConnection cn1; protected void Page_Load( object sender, EventArgs e ) { if (!Page.IsPostBack) { OleDbConnection cn = new OleDbConnection(ConnectionString); cn.Open(); cn1 = new OleDbConnection(ConnectionString); cn1.Open(); OleDbCommand cmd = new OleDbCommand("select * from [Subject]", cn); OleDbDataReader dr = cmd.ExecuteReader(CommandBehavior.CloseConnection); MasterGridView.DataSource = dr; MasterGridView.DataBind(); dr.Close(); cmd.Dispose(); cn.Dispose(); cn1.Dispose(); cn = cn1 = null; } } protected void MasterGridView_RowDataBound( object sender, GridViewRowEventArgs e ) { if (e.Row.RowType == DataControlRowType.DataRow) { GridView oGridView = (GridView)e.Row.FindControl("DetailGridView"); if (oGridView != null) { OleDbCommand cmd = new OleDbCommand("select top 10 * from Document Where pid = " + MasterGridView.DataKeys[e.Row.RowIndex].Value, cn1); OleDbDataReader dr1 = cmd.ExecuteReader(); oGridView.DataSource = dr1; oGridView.DataBind(); dr1.Close(); cmd.Dispose(); } } } protected void DetailGridView_RowDeleting( object sender, GridViewDeleteEventArgs e ) { GridView a = (GridView)sender; Response.Write("您要删除的记录是:<font color='red'>" + a.DataKeys[e.RowIndex].Value.ToString() + "</font>&nbsp;&nbsp;&nbsp;&nbsp;TODO:执行删除动作"); // TODO:执行删除动作 } protected void DetailGridView_RowCommand( object sender, GridViewCommandEventArgs e ) { } protected void Button1_Click( object sender, EventArgs e ) { string Guids = Request.Form["guid"]; if (Guids == null || Guids.Equals(string.Empty)) { Response.Write("没有数据可以修改。"); return; } string sql; OleDbCommand cmd; OleDbConnection cn = new OleDbConnection(); cn.ConnectionString = ConnectionString; cn.Open(); string[] ArrGuid = Guids.Split(','); for (int i = 0 ; i < ArrGuid.Length ; i++) { sql = "UPDATE Document Set Title = @Title,CreateDate = @CreateDate Where id = @id"; cmd = new OleDbCommand(sql, cn); cmd.Parameters.AddWithValue("@Title",Request.Form["Title" + ArrGuid[i].Trim()]); cmd.Parameters.AddWithValue("@CreateDate", Request.Form["Date" + ArrGuid[i].Trim()]); cmd.Parameters.AddWithValue("@id",ArrGuid[i].Trim()); cmd.ExecuteNonQuery(); Response.Write("<li>更新:id= " + ArrGuid[i] + " "+ Request.Form["Title" + ArrGuid[i].Trim()]); } cn.Close(); cn.Dispose(); }}