可一次编辑多行,可根据CheckBox状态,写入相应的数据库字段。谢谢!

解决方案 »

  1.   

    网上搜一下吧..现在手里没有现成的例子.首先你要能把gridview每一行加一个checkbox,这个如果能做了.那么批更新只要更新选中的行就可以了
    (哪行被选中,可以得到被先中行的一个id,可以设置gridview的DataKeyNames 属性来获取)
      

  2.   

    参考:
    http://dotnet.aspx.cc/article/a933b187-06c3-4263-9eec-414a54d9c815/read.aspx
    http://dotnet.aspx.cc/article/a8efc285-f0b1-4f8f-8e73-2b7d8724a47c/read.aspx
      

  3.   

    一次编辑多行?恐怕gridview心有余而力不足
      

  4.   

    很方便的,页面上选好后用一个确定按钮,判断gv中所有checkbox的选中状态,然后写入数据库,批量权限控制就可以这样弄
      

  5.   

    要是我去设计,我会用CheckBox来启用该行是否可编辑,如果选中,则可编辑,然后再编辑多行后,点击提交按钮一次到数据库
      

  6.   

    For i = 0 to GV.COUNT -1
     if Ctype(GV.Rows(i).FindControl("CheckBoxId"),CheckBox).Checked Then
       '把这行数据更新    
     end if
    next
      

  7.   

    选中那个就修改那个。多个就多个循环一下。下面的这个选中多个或者一个进行循环删除
    for (int i = 0; i < this.grLog.Rows.Count; i++)
                {
                    CheckBox cbox = (CheckBox)grLog.Rows[i].FindControl("single_Chk");
                    if (cbox.Checked == true)
                    {
                        string id = grLog.DataKeys[i].Value.ToString();//每条数据的ID
                        sqlt.Operate("delete  from  dbo.bbs_spaceposts where Postid="+id+"");
                    }
                }
      

  8.   

    我原来也这样做,在gridview里面增删改
    就是经常回发,效率很低,用户体验也不是很好
      

  9.   


    是啊,有一个循环来判断哪些被选中了...
    我觉得很容易实现的,asp.net2.0控件强大了许多...
    收藏了,有需要的时候看看
    哈哈
      

  10.   

    试试这个 ASP.NET DEMO 16: 通过GridView布局实现的多行批量更新  http://www.cnblogs.com/Jinglecat/archive/2008/05/22/1204443.html[code=HTML]
    <%@ Page Language="C#" %><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><%-- http://topic.csdn.net/u/20080521/15/a2da7051-4c1b-490d-ab28-1f01323aba47.html?seed=1952824859 --%><script runat="server">    void ShowProductData(GridView grid)
        {
            DataTable dt = CreateSampleData();        grid.DataSource = dt;
            grid.DataBind();
        }    #region sample data    static DataTable CreateSampleEmptyDataTable()
        {
            DataTable tbl = new DataTable("Student");
            
            tbl.Columns.Add("StudentNO", typeof(string));        
            tbl.Columns.Add("FirstName", typeof(string));
            tbl.Columns.Add("LastName", typeof(string));
            tbl.Columns.Add("Age", typeof(int));
            tbl.Columns.Add("Gender", typeof(string));
                    
            return tbl;
        }    static DataTable CreateSampleData()
        {
            DataTable tbl = CreateSampleEmptyDataTable();
            
            tbl.Rows.Add("20021342", "Jack", "Wu", 25, "M");
            tbl.Rows.Add("20025341", "Jue", "You", 23, "F");
            tbl.Rows.Add("20022254", "Viky", "Huang", 24, "F");
            tbl.Rows.Add("20022231", "Leo", "Wong", 24, "M");        return tbl;
        }    #endregion    protected void Page_Load(object sender, EventArgs e)
        {
            if (!IsPostBack)
            {
                ShowProductData(GridView1);
            }
        }       
        
        protected void GridView1_RowDataBound(object sender, GridViewRowEventArgs e)
        {
            DataRowView drv = e.Row.DataItem as DataRowView;
            // 同步 ddlGender 选中项
            if (drv != null)
            {
                DropDownList ddlGender = e.Row.FindControl("ddlGender") as DropDownList;
                if (ddlGender != null)
                {
                    ddlGender.SelectedValue = (string)drv["Gender"];
                }
            }
        }
        
        protected void GridView1_PreRender(object sender, EventArgs e)
        {
            // 维护客户端状态
            bool b;
            string m = "", n = "none";
            foreach (GridViewRow row in GridView1.Rows)
            {
                CheckBox chk = row.FindControl("chkEdit") as CheckBox;
                //if (chk != null)
                //{
                    b = chk.Checked;
                    // 以下代码未进行 null 检查,确保存在对应ID的控件。
                    // 建立健壮性的程序,应进行非空引用检查。
                    //
                    (row.FindControl("lblFirstName") as WebControl).Style[HtmlTextWriterStyle.Display] = b ? n : m;                
                    (row.FindControl("txtFirstName") as WebControl).Style[HtmlTextWriterStyle.Display] = b ? m : n;
                    //
                    (row.FindControl("lblLastName") as WebControl).Style[HtmlTextWriterStyle.Display] = b ? n : m;
                    (row.FindControl("txtLastName") as WebControl).Style[HtmlTextWriterStyle.Display] = b ? m : n;
                    //
                    (row.FindControl("lblAge") as WebControl).Style[HtmlTextWriterStyle.Display] = b ? n : m;
                    (row.FindControl("txtAge") as WebControl).Style[HtmlTextWriterStyle.Display] = b ? m : n;
                    //
                    (row.FindControl("lblGender") as WebControl).Style[HtmlTextWriterStyle.Display] = b ? n : m;
                    (row.FindControl("ddlGender") as WebControl).Style[HtmlTextWriterStyle.Display] = b ? m : n;                
                //}
            }
        }    protected void btnUpdate_Click(object sender, EventArgs e)
        {
            bool updated = false;
            foreach (GridViewRow row in GridView1.Rows)
            {
                CheckBox chk = row.FindControl("chkEdit") as CheckBox;
                if (chk != null && chk.Checked)
                {            
                // 以下代码未进行 null 检查,确保存在对应ID的控件                
                // 建立健壮性的程序,应进行非空引用检查。      
                    string newFirstName = (row.FindControl("txtFirstName") as TextBox).Text.Trim();
                    string newLastName = (row.FindControl("txtLastName") as TextBox).Text.Trim();
                    int newAge = int.Parse((row.FindControl("txtAge") as TextBox).Text.Trim());
                    string newGender = (row.FindControl("ddlGender") as DropDownList).SelectedValue;
                    //******************************************************************************************/
                    // 这里执行真正的数据库更新操作
                    // ....
                    Response.Write("<script>alert('请在[btnUpdate_Click(object sender, EventArgs e)]中实现自己的数据库更新代码')<" + "/script>");                
                    // ....
                    //******************************************************************************************/
                    updated = true;
                }
            }
            //// 假如有数据更新,从数据库加载新数据刷新页面
            //// 当然如果很在乎性能,可以直接从 TextBox 的值 copy 到 Label,但实现起来费时。
            //if (updated)
            //{
            //    ShowProductData();
            //}
        }
    </script>
    [code]
      

  11.   


    <html xmlns="http://www.w3.org/1999/xhtml" >
    <head runat="server">
        <title>ASP.NET DEMO16_GridViewBatchEdit</title>
        <script type="text/javascript">
        var $ = document.getElementById;    
        function chkEdit_Click(sender, args)
        {
            //debugger;        
            // 切换可编辑状态
            var b = sender.checked;
            var m = "", n = "none";
            // 
            $(args.containerClientID + "_" + "lblFirstName").style.display = b ? n : m;
            $(args.containerClientID + "_" + "txtFirstName").style.display = b ? m : n;;   
            //
            $(args.containerClientID + "_" + "lblLastName").style.display = b ? n : m;
            $(args.containerClientID + "_" + "txtLastName").style.display = b ? m : n;;   
            //
            $(args.containerClientID + "_" + "lblAge").style.display = b ? n : m;
            $(args.containerClientID + "_" + "txtAge").style.display = b ? m : n;;           
            //
            $(args.containerClientID + "_" + "lblAge").style.display = b ? n : m;
            $(args.containerClientID + "_" + "txtAge").style.display = b ? m : n;;           
            //
            $(args.containerClientID + "_" + "lblGender").style.display = b ? n : m;
            $(args.containerClientID + "_" + "ddlGender").style.display = b ? m : n;;           
            
        }
        function shouldUpdate() 
        {
            var grd = $('<% =GridView1.ClientID %>');
            var inputs = grd.getElementsByTagName('input');
            for(var i = 0; i < inputs.length; i++) {
                if(inputs[i].type == "checkbox" && inputs[i].id.indexOf("chkEdit") > 0 && inputs[i].checked) {
                    return true;
                }
            }
            return false;
        }
        </script>
    </head>
    <body>
        <form id="form1" runat="server">
        <div>
        <h3>通过GridView布局实现的批量更新</h3>
        <em>请在[btnUpdate_Click(object sender, EventArgs e)]中实现自己的数据库更新代码</em>
        <br />        
        <asp:GridView ID="GridView1" runat="server" AutoGenerateColumns="false" OnRowDataBound="GridView1_RowDataBound" OnPreRender="GridView1_PreRender">
            <Columns>            
                <asp:TemplateField HeaderText="Edit?">                
                    <ItemTemplate>
                       <asp:CheckBox id="chkEdit" onclick='<%# String.Format(@"chkEdit_Click(this, {{containerClientID:""{0}""}})", (Container as Control).ClientID) %>'
                        ToolTip="Enable Edit?" runat="server" />                    
                    </ItemTemplate>
                </asp:TemplateField>
                <asp:TemplateField HeaderText="StudentNO">                
                    <ItemTemplate>
                        <%# (Container.DataItem as DataRowView)["StudentNO"]%> <!-- 避免反射,可提升性能 -->
                    </ItemTemplate>
                </asp:TemplateField>            
                <asp:TemplateField HeaderText="FirstName">                
                    <ItemTemplate>
                        <asp:Label ID="lblFirstName" runat="server" Text='<%# (Container.DataItem as DataRowView)["FirstName"] %>' />
                        <asp:Textbox ID="txtFirstName" runat="server" Text='<%# ((Container as Control).FindControl("lblFirstName") as Label).Text %>' style="display:none;" />
                    </ItemTemplate>
                </asp:TemplateField>            
                <asp:TemplateField HeaderText="LastName">                
                    <ItemTemplate>
                        <asp:Label ID="lblLastName" runat="server" Text='<%# Eval("LastName") %>' />
                        <asp:Textbox ID="txtLastName" runat="server" Text='<%# ((Container as Control).FindControl("lblLastName") as Label).Text %>' style="display:none;" />
                    </ItemTemplate>
                </asp:TemplateField>            
                <asp:TemplateField HeaderText="Age">                
                    <ItemTemplate>
                        <asp:Label ID="lblAge" runat="server" Text='<%# Eval("Age") %>' />
                        <asp:Textbox ID="txtAge" runat="server" Text='<%# ((Container as Control).FindControl("lblAge") as Label).Text %>' style="display:none;" />
                    </ItemTemplate>
                </asp:TemplateField>   
                <asp:TemplateField HeaderText="Gender">                
                    <ItemTemplate>
                        <asp:Label ID="lblGender" runat="server" Text='<%# Eval("Gender").ToString() == "M" ? "Male" : "Female" %>' />
                        <asp:DropDownList ID="ddlGender" runat="server" style="display:none">
                            <asp:ListItem Value="M" Text="Male"/>
                            <asp:ListItem Value="F" Text="Female"/>
                        </asp:DropDownList>
                    </ItemTemplate>
                </asp:TemplateField>   
            </Columns>           
            </asp:GridView>
            <input id="Button2" type="button" value="Reload" onclick="location.href=location.href;" />
            <asp:Button ID="btnUpdate" runat="server" Text="Update" OnClick="btnUpdate_Click" OnClientClick="if(!shouldUpdate()) return !!alert('没有可更新数据!');" />
        </div>
        </form>
    </body>
    </html>[/code]