选中复选框并单击保存按钮后,如何更新GridView? [英] How to update the GridView after checking the checkbox and clicking the save button?

查看:55
本文介绍了选中复选框并单击保存按钮后,如何更新GridView?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我需要设置这些GridView,以便由管理员进行更新.所以既然我有
每个GridView中都有很多员工和很多课程,我认为最好的
更新GridView的一种方法是将空白字段显示为复选框,并且在
管理员希望更新其中一名员工的记录,所有他的记录
要做的只是检查复选框,然后单击更新按钮.我可以
能够将空白字段显示为复选框,但现在我不知道如何
将选中复选框的值发布到数据库中.

我正在寻找的方案是使系统检查每个
每个GridView中的复选框,如果之前已被选中,则保持不变
是.如果它是空的并且现在才被检查,则应将其添加到
员工记录中的数据库.因此,将通过单击保存按钮来更新GridView.我的原始代码是:

I need to set these GridViews for updating by the admin. So since I have
a lot of employees and a lot of courses in each GridView, I think the best
way to update the GridView is to show the blank fields as checkboxes and when
the Admin wants to update the record of one of the employees, all what he
needs to do is just checking the checkboxes and click update button. I could
be able to show the empty fields as checkboxes but now I don''t know how to
post the value of checking the checkbox to the database.

The scenario that I am looking for it is to make the system check every
checkbox in each GridView, if it is already checked before, leave it as it
is. If it was empty and it is just checked now, it should be added to the
database in the record of the employee. Therefore, the GridView will be updated with clicking the save button. My original code is:

<asp:Repeater ID="Repeater1" runat="server" DataSourceID="SqlDataSource1">
                <ItemTemplate>
                    
                    <asp:HiddenField ID="HiddenField1" runat="server" Value=''<%# Eval("GroupID")%>'' />
                    
                    <asp:SqlDataSource ID="SqlDataSource1" runat="server" 
                                        ConnectionString="<%$ ConnectionStrings:testConnectionString %>" 
                                        SelectCommandType="StoredProcedure" SelectCommand="kbiReport">
                                        <%--FilterExpression="[Division] like ''{0}%'' and [Organization] like ''{1}%''">--%>
                            
                        <%--<FilterParameters>
                            <asp:ControlParameter ControlID="ddlDivision" Name="Division" 
                                                     PropertyName="SelectedValue" Type="String" />
                            <asp:ControlParameter ControlID="ddlOrganization" Name="Organization" 
                                                    PropertyName="SelectedValue" Type="String" />
                        </FilterParameters>--%>
    
                        <SelectParameters>
                            <%--ControlParameter is linked to the HiddenField above to generate different GridView based on different values 
                                of GroupID--%>
                            <asp:ControlParameter ControlID="HiddenField1" Name="GroupID" PropertyName="Value" />
                        </SelectParameters>
                    </asp:SqlDataSource>
    
                    <asp:GridView ID="GridView1" runat="server" 
                                    AllowSorting="True" 
                                    CellPadding="3" 
                                    DataSourceID="SqlDataSource1" 
                                    CssClass="mGrid"
                                    AlternatingRowStyle-CssClass="alt" 
                                    RowStyle-HorizontalAlign="Center" 
                                    OnRowDataBound="GridView1_RowDataBound" OnDataBound="GridView1_DataBound">
                        <AlternatingRowStyle BackColor="White" ForeColor="#284775" />
                        <HeaderStyle Font-Bold = "true" ForeColor="Black"/> 
                        <Columns>
                            <asp:CommandField ShowSelectButton="True" />
                    
                            <%--<asp:TemplateField HeaderText="Select">
                            <ItemTemplate>
                            <asp:CheckBox ID="chkSelect" runat="server" AutoPostBack="true" OnCheckedChanged="chkSelect_CheckedChanged"/>
                            </ItemTemplate>
                            </asp:TemplateField>--%>
                        </Columns>
                        <EditRowStyle BackColor="#999999" />
                        <FooterStyle BackColor="#5D7B9D" Font-Bold="True" ForeColor="White" />
                        <PagerStyle BackColor="#284775" ForeColor="White" HorizontalAlign="Center" />
                        <RowStyle BackColor="#F7F6F3" ForeColor="#333333" />
                        <SelectedRowStyle BackColor="#E2DED6" Font-Bold="True" ForeColor="#333333" />
                        <SortedAscendingCellStyle BackColor="#E9E7E2" />
                        <SortedAscendingHeaderStyle BackColor="#506C8C" />
                        <SortedDescendingCellStyle BackColor="#FFFDF8" />
                        <SortedDescendingHeaderStyle BackColor="#6F8DAE" />
                    </asp:GridView>
    
                </ItemTemplate>
            </asp:Repeater>
            
            <asp:SqlDataSource ID="SqlDataSource1" runat="server" 
                               ConnectionString="<%$ ConnectionStrings:testConnectionString %>"
                               SelectCommand="SELECT DISTINCT GroupID FROM courses">
            </asp:SqlDataSource>
    
            <asp:Button ID="btnSave" runat="server" OnClick="btnSave_Click" Text="Save" />
            <br /><br />  



背后的代码:



The Code-Behind:

protected void GridView1_RowDataBound(object sender, GridViewRowEventArgs e)
    {
        if (e.Row.RowType == DataControlRowType.DataRow)
        {
            foreach (TableCell c in e.Row.Cells)
            {
                // Check if the cell vlaue = Yes
                // if it is Yes, the cell will be colored with Light Green
                if (c.Text.Equals("Yes"))
                {
                    c.BackColor = System.Drawing.Color.LightGreen;
                }
            }
        }

        // The following is for changing the color of headers in each GridView based on the value of the HiddenFild
        // BTW, the value of the HiddenField is the value of the GroupID in Group Table in the Database
        else if(e.Row.RowType == DataControlRowType.Header){
            switch (((HiddenField)((GridView)sender).Parent.FindControl("HiddenField1")).Value)
            {
                case "1":
                    for (int i = 5; i < e.Row.Cells.Count; i++)
                        e.Row.Cells[i].BackColor = System.Drawing.Color.LightBlue;
                    break;

                case "2":
                    for (int i = 5; i < e.Row.Cells.Count; i++)
                        e.Row.Cells[i].BackColor = System.Drawing.Color.LightYellow;
                    break;

                case "3":
                    for (int i = 5; i < e.Row.Cells.Count; i++)
                        e.Row.Cells[i].BackColor = System.Drawing.Color.Orange;
                    break;
            }
        }}


        //For inserting checkboxes inside all courses buttons
        protected void GridView1_DataBound(object sender, EventArgs e){
            GridView GridView1 = (GridView)sender;
            foreach (GridViewRow objRow in GridView1.Rows)
            {
                for (int i = 5; i < objRow.Cells.Count; i++){
                    CheckBox chkCheckBox = new CheckBox();
                    objRow.Cells[i].Controls.Add(chkCheckBox);
                    if (objRow.Cells[i].BackColor == System.Drawing.Color.LightGreen)
                        chkCheckBox.Checked = true;
                }

            }
        }


        //For updating the GridView (Save Button)
        protected void btnSave_Click(object sender, EventArgs e)
        {

        }



**更新:**
我修改了btnSave_Click按钮,如下所示:



**UPDATE:**
I modified the btnSave_Click button to be as following:

//For updating the GridView (Save Button)
        protected void btnSave_Click(object sender, EventArgs e)
        {
            GridView GridView1 = (GridView)sender;
            // Are there checked boxes?
            List CheckBoxList = new List();
            for (int i = 0; i < GridView1.Rows.Count; i++)
            {
                int courseid = (int)GridView1.DataKeys[i][0];
                CheckBox checkBox = (CheckBox)GridView1.Rows[i].FindControl("CheckBox");
                if (checkBox.Checked)
                {
                    CheckBoxList.Add(courseid);
                }
            }
        }



但出现以下错误:
** Sys.WebForms.PageRequestManagerServerErrorException:无法将类型为"System.Web.UI.WebControls.Button"的对象转换为类型为"System.Web.UI.WebControls.GridView"的****

我不知道为什么会收到这个错误.有人可以帮我吗?



But I got the following error:
**Sys.WebForms.PageRequestManagerServerErrorException: Unable to cast object of type ''System.Web.UI.WebControls.Button'' to type ''System.Web.UI.WebControls.GridView''**

I don''t know why I got this error. Could anyone help me with this?

推荐答案

ConnectionStrings:testConnectionString%> SelectCommandType ="StoredProcedure" SelectCommand ="kbiReport"> <%-FilterExpression ="[Division]如"{0}%",[Organization]如"{1}%''">-%> <%-< FilterParameters> < asp:ControlParameter ControlID ="ddlDivision" Name ="Division" PropertyName ="SelectedValue" Type ="String"/> < asp:ControlParameter ControlID ="ddlOrganization" Name ="Organization" PropertyName ="SelectedValue" Type ="String"/> </FilterParameters>-%> < SelectParameters> <%-ControlParameter链接到上面的HiddenField,以基于不同的值生成不同的GridView 的GroupID-%> < asp:ControlParameter ControlID ="HiddenField1" Name ="GroupID" PropertyName ="Value"/> </SelectParameters> </asp:SqlDataSource> < asp:GridView ID ="GridView1" runat ="server" AllowSorting =真" CellPadding ="3" DataSourceID ="SqlDataSource1" CssClass ="mGrid" AlternatingRowStyle-CssClass ="alt" RowStyle-Horizo​​ntalAlign ="Center" OnRowDataBound ="GridView1_RowDataBound" OnDataBound ="GridView1_DataBound"> < AlternatingRowStyle BackColor ="White" ForeColor =#284775"/> < HeaderStyle Font-Bold ="true" ForeColor ="Black"/> <列> < asp:CommandField ShowSelectButton ="True"/> <%-< asp:TemplateField HeaderText ="Select"> < ItemTemplate> < asp:CheckBox ID ="chkSelect" runat ="server" AutoPostBack ="true" OnCheckedChanged ="chkSelect_CheckedChanged"/> </ItemTemplate> </asp:TemplateField>-%> </列> < EditRowStyle BackColor =#999999"/> < FooterStyle BackColor =#5D7B9D" Font-Bold ="True" ForeColor ="White"/> < PagerStyle BackColor =#284775" ForeColor ="White" Horizo​​ntalAlign ="Center"/> < RowStyle BackColor =#F7F6F3" ForeColor =#333333"/> < SelectedRowStyle BackColor =#E2DED6" Font-Bold ="True" ForeColor =#333333"/> < SortedAscendingCellStyle BackColor =#E9E7E2"/> < SortedAscendingHeaderStyle BackColor =#506C8C"/> < SortedDescendingCellStyle BackColor =#FFFDF8"/> < SortedDescendingHeaderStyle BackColor =#6F8DAE"/> </asp:GridView> </ItemTemplate> </asp:Repeater> < asp:SqlDataSource ID ="SqlDataSource1" runat =服务器" ConnectionString =<%
ConnectionStrings:testConnectionString %>" SelectCommandType="StoredProcedure" SelectCommand="kbiReport"> <%--FilterExpression="[Division] like ''{0}%'' and [Organization] like ''{1}%''">--%> <%--<FilterParameters> <asp:ControlParameter ControlID="ddlDivision" Name="Division" PropertyName="SelectedValue" Type="String" /> <asp:ControlParameter ControlID="ddlOrganization" Name="Organization" PropertyName="SelectedValue" Type="String" /> </FilterParameters>--%> <SelectParameters> <%--ControlParameter is linked to the HiddenField above to generate different GridView based on different values of GroupID--%> <asp:ControlParameter ControlID="HiddenField1" Name="GroupID" PropertyName="Value" /> </SelectParameters> </asp:SqlDataSource> <asp:GridView ID="GridView1" runat="server" AllowSorting="True" CellPadding="3" DataSourceID="SqlDataSource1" CssClass="mGrid" AlternatingRowStyle-CssClass="alt" RowStyle-HorizontalAlign="Center" OnRowDataBound="GridView1_RowDataBound" OnDataBound="GridView1_DataBound"> <AlternatingRowStyle BackColor="White" ForeColor="#284775" /> <HeaderStyle Font-Bold = "true" ForeColor="Black"/> <Columns> <asp:CommandField ShowSelectButton="True" /> <%--<asp:TemplateField HeaderText="Select"> <ItemTemplate> <asp:CheckBox ID="chkSelect" runat="server" AutoPostBack="true" OnCheckedChanged="chkSelect_CheckedChanged"/> </ItemTemplate> </asp:TemplateField>--%> </Columns> <EditRowStyle BackColor="#999999" /> <FooterStyle BackColor="#5D7B9D" Font-Bold="True" ForeColor="White" /> <PagerStyle BackColor="#284775" ForeColor="White" HorizontalAlign="Center" /> <RowStyle BackColor="#F7F6F3" ForeColor="#333333" /> <SelectedRowStyle BackColor="#E2DED6" Font-Bold="True" ForeColor="#333333" /> <SortedAscendingCellStyle BackColor="#E9E7E2" /> <SortedAscendingHeaderStyle BackColor="#506C8C" /> <SortedDescendingCellStyle BackColor="#FFFDF8" /> <SortedDescendingHeaderStyle BackColor="#6F8DAE" /> </asp:GridView> </ItemTemplate> </asp:Repeater> <asp:SqlDataSource ID="SqlDataSource1" runat="server" ConnectionString="<%


ConnectionStrings:testConnectionString%>" SelectCommand =从课程中选择DISTINCT GroupID"> </asp:SqlDataSource> < asp:Button ID ="btnSave" runat ="server" OnClick ="btnSave_Click" Text ="Save"/> < br/>< br/>
ConnectionStrings:testConnectionString %>" SelectCommand="SELECT DISTINCT GroupID FROM courses"> </asp:SqlDataSource> <asp:Button ID="btnSave" runat="server" OnClick="btnSave_Click" Text="Save" /> <br /><br />



背后的代码:



The Code-Behind:

protected void GridView1_RowDataBound(object sender, GridViewRowEventArgs e)
    {
        if (e.Row.RowType == DataControlRowType.DataRow)
        {
            foreach (TableCell c in e.Row.Cells)
            {
                // Check if the cell vlaue = Yes
                // if it is Yes, the cell will be colored with Light Green
                if (c.Text.Equals("Yes"))
                {
                    c.BackColor = System.Drawing.Color.LightGreen;
                }
            }
        }

        // The following is for changing the color of headers in each GridView based on the value of the HiddenFild
        // BTW, the value of the HiddenField is the value of the GroupID in Group Table in the Database
        else if(e.Row.RowType == DataControlRowType.Header){
            switch (((HiddenField)((GridView)sender).Parent.FindControl("HiddenField1")).Value)
            {
                case "1":
                    for (int i = 5; i < e.Row.Cells.Count; i++)
                        e.Row.Cells[i].BackColor = System.Drawing.Color.LightBlue;
                    break;

                case "2":
                    for (int i = 5; i < e.Row.Cells.Count; i++)
                        e.Row.Cells[i].BackColor = System.Drawing.Color.LightYellow;
                    break;

                case "3":
                    for (int i = 5; i < e.Row.Cells.Count; i++)
                        e.Row.Cells[i].BackColor = System.Drawing.Color.Orange;
                    break;
            }
        }}


        //For inserting checkboxes inside all courses buttons
        protected void GridView1_DataBound(object sender, EventArgs e){
            GridView GridView1 = (GridView)sender;
            foreach (GridViewRow objRow in GridView1.Rows)
            {
                for (int i = 5; i < objRow.Cells.Count; i++){
                    CheckBox chkCheckBox = new CheckBox();
                    objRow.Cells[i].Controls.Add(chkCheckBox);
                    if (objRow.Cells[i].BackColor == System.Drawing.Color.LightGreen)
                        chkCheckBox.Checked = true;
                }

            }
        }


        //For updating the GridView (Save Button)
        protected void btnSave_Click(object sender, EventArgs e)
        {

        }



**更新:**
我修改了btnSave_Click按钮,如下所示:



**UPDATE:**
I modified the btnSave_Click button to be as following:

//For updating the GridView (Save Button)
        protected void btnSave_Click(object sender, EventArgs e)
        {
            GridView GridView1 = (GridView)sender;
            // Are there checked boxes?
            List CheckBoxList = new List();
            for (int i = 0; i < GridView1.Rows.Count; i++)
            {
                int courseid = (int)GridView1.DataKeys[i][0];
                CheckBox checkBox = (CheckBox)GridView1.Rows[i].FindControl("CheckBox");
                if (checkBox.Checked)
                {
                    CheckBoxList.Add(courseid);
                }
            }
        }



但出现以下错误:
** Sys.WebForms.PageRequestManagerServerErrorException:无法将类型为"System.Web.UI.WebControls.Button"的对象转换为类型为"System.Web.UI.WebControls.GridView"的****

我不知道为什么会收到这个错误.有人可以帮我吗?



But I got the following error:
**Sys.WebForms.PageRequestManagerServerErrorException: Unable to cast object of type ''System.Web.UI.WebControls.Button'' to type ''System.Web.UI.WebControls.GridView''**

I don''t know why I got this error. Could anyone help me with this?


请尝试以下操作:
Try following:
protected void btnSave_Click(object sender, EventArgs e)
   {

       foreach (RepeaterItem repeaterItem in Repeater1.Items)
       {
           GridView GridView1 = (GridView)repeaterItem.FindControl("GridView1");
           List CheckBoxList = new List();
           foreach (GridViewRow gvr in GridView1.Rows)
           {
               CheckBox checkBox = (CheckBox)gvr.FindControl("CheckBox");
                if (checkBox.Checked)
                {
                    CheckBoxList.Add(courseid);
                }
           }
       }
   }


这篇关于选中复选框并单击保存按钮后,如何更新GridView?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆