当前位置:编程学习 > C#/ASP.NET >>

GridView嵌套gridview,实现子(从)gridview的编辑更新等操作

如何在 子gridview中实现 编辑更新等操作?每次更新一条记录。删除已完成。主要代码部分如下。前端

<asp:GridView ID="gvclassexam" runat="server" 
            onrowdatabound="gvclassexam_RowDataBound" AutoGenerateColumns="False">
               <Columns>
                <asp:TemplateField HeaderText="科目">
                    <ItemTemplate>
                        <asp:CheckBox ID="cb_class" runat="server" 
                            Text="<%# Bind('cs_name') %>" />
                    </ItemTemplate>
                    <ItemStyle Width="160px" />
                </asp:TemplateField>
                <asp:TemplateField HeaderText="考试">
                    <ItemTemplate>
                        <asp:GridView ID="gvexam" runat="server" AutoGenerateColumns="False"
                        onrowdeleting="gvexam_RowDeleting" 
                        onrowediting="gvexam_RowEditing" 
                        OnRowUpdating = "gvexam_RowUpdating"
                        OnRowCancelingEdit ="gvexam_RowCancelingEdit">
                            <Columns>
                                <asp:TemplateField HeaderText="考试名称">
                                    <EditItemTemplate>
                                        <asp:TextBox ID="tbe_name" runat="server" Text="<%# Bind('e_name') %>"></asp:TextBox>
                                    </EditItemTemplate>
                                    <ItemTemplate>
                                        <asp:Label ID="lbe_name" runat="server" Text="<%# Bind('e_name') %>"></asp:Label>
                                    </ItemTemplate>
                                    <ItemStyle Width="100px" />
                                </asp:TemplateField>

                                <asp:TemplateField HeaderText="教室">
                                    <EditItemTemplate>
                                        <asp:TextBox ID="tbe_room" runat="server" Text="<%# Bind('e_room') %>"></asp:TextBox>
                                    </EditItemTemplate>
                                    <ItemTemplate>
                                        <asp:Label ID="lbe_room" runat="server" Text="<%# Bind('e_room') %>"></asp:Label>
                                    </ItemTemplate>
                                    <ItemStyle Width="200px" />
                                </asp:TemplateField>
                                <asp:CommandField ShowEditButton="True" ButtonType="Image"    
                                     EditImageUrl="~/ButtonImages/edit.gif" UpdateImageUrl="Images/savebtn.png" CancelImageUrl="Images/cancel.png" >
                                    <ItemStyle Width="20px" />
                                </asp:CommandField>
                                <asp:CommandField ShowDeleteButton="True"  
                                     DeleteImageUrl="Images/delete.gif" ButtonType="Image">
                                    <ItemStyle Width="20px" />
                                </asp:CommandField>
                            </Columns>
                        </asp:GridView>
                    </ItemTemplate>
                </asp:TemplateField>
            </Columns>
        </asp:GridView>


后台:

    protected void Page_Load(object sender, EventArgs e)
    {
        OperateSql op = new OperateSql(ConfigurationManager.ConnectionStrings["conn"].ConnectionString);
        DataTable dt = op.GetData("select * from classes order by cs_name");
        this.gvclassexam.DataSource = dt;
        this.gvclassexam.DataKeyNames = new string[] { "cs_no" };
        this.gvclassexam.DataBind();
    }
    protected void gvclassexam_RowDataBound(object sender, GridViewRowEventArgs e)
    {
        if (e.Row.RowIndex >= 0)
        {
            OperateSql op = new OperateSql(ConfigurationManager.ConnectionStrings["conn"].ConnectionString);
            DataTable dt = op.GetData("select * from exams where e_class='" + gvclassexam.DataKeys[e.Row.RowIndex].Value.ToString() + "'");
            GridView g = (GridView)e.Row.FindControl("gvexam");
            g.DataSource = dt;
            g.DataKeyNames = new string[] { "e_no" };
            g.DataBind();
        }
    }
    protected void gvexam_RowDeleting(object sender, GridViewDeleteEventArgs e)
    {
        OperateSql op = new OperateSql(ConfigurationManager.ConnectionStrings["conn"].ConnectionString);
        GridView a = (GridView)sender;
        op.UpdateDataSoures("delete from exams where e_no='" + a.DataKeys[e.RowIndex].Value.ToString() + "'");
        Response.Redirect("AddExam.aspx");
    }
    protected void gvexam_RowEditing(object sender, GridViewEditEventArgs e)
    {
        OperateSql op = new OperateSql(ConfigurationManager.ConnectionStrings["conn"].ConnectionString);
        GridView a = (GridView)sender;
        a.EditIndex = e.NewEditIndex; 
    }
    protected void gvexam_RowUpdating(object sender, GridViewUpdateEventArgs e)
    {
        OperateSql op = new OperateSql(ConfigurationManager.ConnectionStrings["conn"].ConnectionString);
        GridView a = (GridView)sender;
        SqlParameter[] param = new SqlParameter[]
        {
            new SqlParameter("e_name",((TextBox)a.Rows[e.RowIndex].FindControl("tbe_name")).Text),
            new SqlParameter("e_room",((TextBox)a.Rows[e.RowIndex].FindControl("tbe_room")).Text),
        };
        string cmd = "update exams set e_name=@e_name,e_room =@e_room where e_no='" + a.DataKeys[e.RowIndex].Value.ToString() + "'";
        op.UpdateDataSoures(cmd, param);
    }
    protected void gvexam_RowCancelingEdit(object sender, GridViewCancelEditEventArgs e)
    {
        OperateSql op = new OperateSql(ConfigurationManager.ConnectionStrings["conn"].ConnectionString);
        GridView a = (GridView)sender;
        a.EditIndex = -1;
    }
--------------------编程问答-------------------- 想问大家 为什么 上述代码运行中 需点击两次子gridview的编辑才出现更新效果? --------------------编程问答-------------------- 点击两次?是不是事件绑定的问题,可以调试看看 --------------------编程问答--------------------
引用楼主 grace9 的回复:
如何在 子gridview中实现 编辑更新等操作?每次更新一条记录。删除已完成。主要代码部分如下。前端
C# code

<asp:GridView ID="gvclassexam" runat="server" 
            onrowdatabound="gvclassexam_RowDataBound" AutoGenerateColumns="False">
       ……

 protected void gvexam_RowEditing(object sender, GridViewEditEventArgs e)
    {
        OperateSql op = new OperateSql(ConfigurationManager.ConnectionStrings["conn"].ConnectionString);
        GridView a = (GridView)sender;
        a.EditIndex = e.NewEditIndex; 
    }
中的
 OperateSql op = new OperateSql(ConfigurationManager.ConnectionStrings["conn"].ConnectionString);这行代码没用。



直接这样更新不行吗?比如
 protected void GridView1_RowUpdating(object sender, GridViewUpdateEventArgs e)
        {
            string Index = this.GridView1.DataKeys[e.RowIndex].Value.ToString();
            string StartTime = (this.GridView1.Rows[e.RowIndex].FindControl("Txt_CreateDateST01") as HtmlInputText).Value.Trim();
            string EndTime = (this.GridView1.Rows[e.RowIndex].FindControl("Txt_CreateDateST02") as HtmlInputText).Value.Trim();
            bool AllowApp;
            CheckBox ckb = this.GridView1.Rows[e.RowIndex].FindControl("Cbxallow") as CheckBox;
            if (ckb.Checked == true)
            {
                AllowApp = true;
            }
            else
            {
                AllowApp = false;
            }
            try
            {
                bool flag = new M_BLL.T_Admin().UpdateLevelApp(Index, StartTime, EndTime, AllowApp);
                if (flag)
                {
                    ScriptManager.RegisterClientScriptBlock(UpdatePanel1, this.GetType(), "click", "alert('修改成功!')", true);
                }
                else
                {
                    ScriptManager.RegisterClientScriptBlock(UpdatePanel1, this.GetType(), "click", "alert('请确保输入信息正确!')", true);
                }
            }
            catch
            {
                ScriptManager.RegisterClientScriptBlock(UpdatePanel1, this.GetType(), "click", "alert('数据库有问题请联系管理员!')", true);
            }

            this.GridView1.EditIndex = -1;
            GvBind();
        }
--------------------编程问答-------------------- 经验证,EDIT需点击两次才有效,困扰啊,楼主快想办法
补充:.NET技术 ,  ASP.NET
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,