一次编辑 GridView 的所有行

在平时的实际项目中,为了减少往返提交数据,可以一次编辑 GridView 的所有行,这样大大提高用户使用产品的体验。下面就讲解何一次编辑 GridView 的所有数据行。在下面的例子中,数据库使用《ASP.NET 2.0应用开发技术》一书中Site\App_Data\下的 ASPNET20Book.mdb 数据库。例子中的数据更新方式使用 SqlDataSource 数据源控件的UpdateCommand属性,但此方法同样适用于存储过程,SQL 语句等。

<%@ Page Language="C#" AutoEventWireup="true" CodeFile="Default7.aspx.cs" Inherits="Default7" %>

<!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 runat="server">
    
<title>无标题页</title>
</head>
<body>
    
<form id="form1" runat="server">
        
<div>
            
<asp:GridView ID="GridView1" runat="server" Font-Size="12px" CellPadding="3" AutoGenerateColumns="False"
                DataKeyNames
="id" DataSourceID="SqlDataSource1" OnRowDataBound="GridView1_RowDataBound"
                OnRowCreated
="GridView1_RowCreated">
                
<HeaderStyle BackColor="#EDEDED" />
                
<Columns>
                    
<asp:TemplateField HeaderText="姓名">
                        
<ItemTemplate>
                            
<asp:TextBox ID="txtTitle" runat="server" Text='<%#Eval("Title") %>'></asp:TextBox>
                        
</ItemTemplate>
                    
</asp:TemplateField>
                    
<asp:TemplateField HeaderText="性别">
                        
<ItemTemplate>
                            
<asp:RadioButtonList ID="txtGender" runat="server" RepeatColumns="2">
                                
<asp:ListItem Text='男'></asp:ListItem>
                                
<asp:ListItem Text='女'></asp:ListItem>
                            
</asp:RadioButtonList>
                        
</ItemTemplate>
                    
</asp:TemplateField>
                    
<asp:TemplateField HeaderText="学历">
                        
<ItemTemplate>
                            
<asp:DropDownList ID="txtClassName" runat="server">
                            
</asp:DropDownList>
                        
</ItemTemplate>
                    
</asp:TemplateField>
                
</Columns>
            
</asp:GridView>
            
<asp:SqlDataSource ID="SqlDataSource1" runat="server" ConnectionString="Persist Security Info=False;User ID=sa;Password=;Initial Catalog=Book;Server=."
                ProviderName
="System.Data.SqlClient" SelectCommand="SELECT * FROM [Student]"
                UpdateCommand
="Update [Student] Set Title = @Title,Gender = @Gender,ClassName=@ClassName Where id=@id">
            
</asp:SqlDataSource>
            
<asp:Button ID="Button1" runat="server" Text="保存所有修改" OnClick="XianhuiMeng_Click" />
        
</div>
    
</form>
</body>
</html>

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.Web.UI.WebControls.WebParts;
using System.Web.UI.HtmlControls;

public partial class Default7 : System.Web.UI.Page
{
    
protected void Page_Load(object sender, EventArgs e)
    
{

    }


    
string[] ClassNameArray = "大学""中学""高中" };

    
//初始化原来的值
    protected void GridView1_RowDataBound(object sender, GridViewRowEventArgs e)
    
{
        
if (e.Row.RowType == DataControlRowType.DataRow)
        
{
            System.Data.DataRowView drv 
= (System.Data.DataRowView)e.Row.DataItem;
            RadioButtonList rbl 
= (RadioButtonList)e.Row.FindControl("txtGender");
            
if (rbl != null)
            
{
                
if ((bool)drv["Gender"])
                
{
                    rbl.Items.FindByText(
"").Selected = true;
                }

                
else
                
{
                    rbl.Items.FindByText(
"").Selected = true;
                }

            }


            DropDownList ddl 
= (DropDownList)e.Row.FindControl("txtClassName");
            
if (ddl != null)
            
{
                ddl.Items.FindByText(drv[
"ClassName"].ToString()).Selected = true;
            }

        }

    }


    
// 初始化项目列表
    protected void GridView1_RowCreated(object sender, GridViewRowEventArgs e)
    
{
        
if (e.Row.RowType == DataControlRowType.DataRow)
        
{
            DropDownList ddl 
= (DropDownList)e.Row.FindControl("txtClassName");
            ddl.DataSource 
= ClassNameArray;
            ddl.DataBind();
        }

    }


    
//处理提交的数据
    protected void XianhuiMeng_Click(object sender, EventArgs e)
    
{
        
foreach (GridViewRow gvr in GridView1.Rows)
        
{
            
string tGender = ((RadioButtonList)gvr.FindControl("txtGender")).SelectedValue;
            SqlDataSource1.UpdateParameters.Add(
new Parameter("Title", TypeCode.String, ((TextBox)gvr.FindControl("txtTitle")).Text));
            SqlDataSource1.UpdateParameters.Add(
new Parameter("Gender", TypeCode.Boolean, (tGender == "" ? "True" : "False")));
            SqlDataSource1.UpdateParameters.Add(
new Parameter("ClassName",
                           TypeCode.String, ((DropDownList)gvr.FindControl(
"txtClassName")).SelectedValue));
            SqlDataSource1.UpdateParameters.Add(
new Parameter("id", TypeCode.Int32, GridView1.DataKeys[gvr.DataItemIndex].Value.ToString()));
            SqlDataSource1.Update();
            SqlDataSource1.UpdateParameters.Clear();
        }

        Response.Redirect(Request.UrlReferrer.ToString());
    }


}

posted on 2007-12-09 15:39  执法长老  阅读(277)  评论(0编辑  收藏  举报

导航