【问题标题】:ASP.NET Edit and Delete issues in GridViewGridView 中的 ASP.NET 编辑和删除问题
【发布时间】:2012-11-15 20:57:55
【问题描述】:

我创建了带有插入、编辑和删除功能的 GridView。插入很好,但不是删除和编辑。当我单击删除时,它应该是自动删除行,但它永远不会发生,因为它仍然存在。第二个问题与编辑相同,我单击编辑,然后在此处更改某些内容,然后单击更新,单击后没有任何更改,并且 GridView 中的数据仍然相同。我确定我遗漏了一些小东西......请帮忙!

这里是 HTML 后面的 C# 代码,

protected void GridViewServer_RowEditing(object sender, GridViewEditEventArgs e)
    {
        GridViewServer.EditIndex = e.NewEditIndex;
        BindGridView();          

    }

    protected void GridViewServer_RowCancelingEdit(object sender, GridViewCancelEditEventArgs e)
    {
        GridViewServer.EditIndex = -1;
        BindGridView();           
    }

    protected void GridViewServer_RowDeleting(object sender, GridViewDeleteEventArgs e)
    {           
        GridViewRow _row = GridViewServer.Rows[e.RowIndex];
        Label servername = (Label)_row.FindControl("lblServerName");

        SqlConnection conn = new SqlConnection(ConfigurationManager.ConnectionStrings["Database_Shared_NotebookConnectionString"].ConnectionString);
        SqlCommand cmd = new SqlCommand("delete from tblServer where ServerName = '" + servername + "'", conn);
        cmd.CommandType = CommandType.Text;
        conn.Open();
        cmd.ExecuteNonQuery();

        GridViewServer.EditIndex = -1;
        BindGridView();
        conn.Close();

    }

    protected void GridViewServer_RowUpdating(object sender, GridViewUpdateEventArgs e)
    {


        GridViewRow _row = GridViewServer.Rows[e.RowIndex];
        Label servername = (Label)_row.FindControl("lblServerName");
        SqlConnection conn = new SqlConnection(ConfigurationManager.ConnectionStrings["Database_Shared_NotebookConnectionString"].ConnectionString);
        SqlCommand cmd = new SqlCommand("update tblServer set ClusterName = @ClusterName, Architecture = @Architecture, Database_Type = @DataType, Restriction = @Restriction, Business_Continuity_Plan = @BCP, Tenant_Code = @TenantCode where ClusterName =  '" + servername + "'", conn);
        cmd.CommandType = CommandType.Text;
        //cmd.Parameters.AddWithValue("@ServerName", ((Label)_row.FindControl("lblServerName")).Text);
        cmd.Parameters.AddWithValue("@ClusterName", ((DropDownList)_row.FindControl("DropDownClusterName")).Text);
        cmd.Parameters.AddWithValue("@Architecture", ((DropDownList)_row.FindControl("DropDownArchitecture")).Text);
        cmd.Parameters.AddWithValue("@DataType", ((DropDownList)_row.FindControl("DropDownDataType")).Text);
        cmd.Parameters.AddWithValue("@Restriction", ((DropDownList)_row.FindControl("DropDownRestriction")).Text);
        cmd.Parameters.AddWithValue("@BCP", ((TextBox)_row.FindControl("txtBCP")).Text);
        cmd.Parameters.AddWithValue("@TenantCode", ((TextBox)_row.FindControl("txtTenantCode")).Text);

        conn.Open();
        cmd.ExecuteNonQuery();

        GridViewServer.EditIndex = -1;
        BindGridView();
        conn.Close();

    }

public void BindGridView()
    {
        SqlConnection conn = new SqlConnection(ConfigurationManager.ConnectionStrings["Database_Shared_NotebookConnectionString"].ConnectionString);

        conn.Open();

        string sqlquery = ("SELECT * FROM tblServer");

        SqlCommand command = new SqlCommand(sqlquery, conn);

        SqlDataAdapter adp = new SqlDataAdapter(command);

        DataSet ds = new DataSet();

        adp.Fill(ds);

        GridViewServer.DataSource = ds.Tables[0];

        GridViewServer.DataBind();
    }

GridView HTML 代码如果你需要看,

<asp:GridView ID="GridViewServer" runat="server" AllowPaging="True" AllowSorting="True" AutoGenerateColumns="False" BackColor="White" BorderColor="#CCCCCC" BorderStyle="None" BorderWidth="1px" CellPadding="3" DataKeyNames="ServerName" GridLines="None" ShowFooter="True" onrowcancelingedit="GridViewServer_RowCancelingEdit" 
        onrowdeleting="GridViewServer_RowDeleting" onrowediting="GridViewServer_RowEditing" 
        onrowupdating="GridViewServer_RowUpdating">
        <Columns>               
            <asp:TemplateField HeaderText="ServerName" SortExpression="ServerName">
                <ItemTemplate>
                    <asp:Label ID="lblServerName" runat="server" Text='<%# Eval("ServerName") %>'></asp:Label>
                </ItemTemplate>
                <EditItemTemplate>
                    <asp:Label ID="txtServerName" runat="server" Text='<%# Eval("ServerName") %>'></asp:Label>
                </EditItemTemplate>
                <FooterTemplate>
                    <asp:TextBox ID="txtServerName" runat="server"></asp:TextBox>
                    <asp:RequiredFieldValidator ID="rfvServerName" runat="server" ControlToValidate="txtServerName" ErrorMessage="Required" ForeColor="Red"></asp:RequiredFieldValidator>
                </FooterTemplate>
            </asp:TemplateField>
            <asp:TemplateField HeaderText="ClusterName" SortExpression="ClusterName">
                <ItemTemplate>
                    <asp:Label ID="lblClusterName" runat="server" Text='<%# Eval("ClusterName") %>'></asp:Label>
                </ItemTemplate>
                <EditItemTemplate>
                    <asp:DropDownList ID="DropDownClusterName" runat="server" AutoPostBack="True" DataSourceID="ClusterName" DataTextField="ClusterName" DataValueField="ClusterName">
                    </asp:DropDownList>
                </EditItemTemplate>
                <FooterTemplate>
                    <asp:DropDownList ID="DropDownClusterName" runat="server" DataSourceID="ClusterName" DataTextField="ClusterName" DataValueField="ClusterName">
                    </asp:DropDownList>
                    <asp:SqlDataSource ID="ClusterName" runat="server" ConnectionString="<%$ ConnectionStrings:Database_Shared_NotebookConnectionString %>" SelectCommand="SELECT [ClusterName] FROM [tblCluster]"></asp:SqlDataSource>                       
                </FooterTemplate>
            </asp:TemplateField>
            <asp:TemplateField HeaderText="Architecture" SortExpression="Architecture">
                <ItemTemplate>
                    <asp:Label ID="lblArchitecture" runat="server" Text='<%# Eval("Architecture") %>'></asp:Label>
                </ItemTemplate>
                <EditItemTemplate>
                    <asp:DropDownList ID="DropDownArchitecture" runat="server">
                        <asp:ListItem Selected="True"></asp:ListItem>
                        <asp:ListItem>BSN EAP</asp:ListItem>
                        <asp:ListItem>BSN NEA</asp:ListItem>
                        <asp:ListItem>BSNConnect.com</asp:ListItem>
                        <asp:ListItem>BSNDMZ.COM</asp:ListItem>
                        <asp:ListItem>Dow EAP</asp:ListItem>
                        <asp:ListItem>Dow NEA</asp:ListItem>
                     </asp:DropDownList>
                </EditItemTemplate>
                <FooterTemplate>
                    <asp:DropDownList ID="DropDownArchitecture" runat="server">
                        <asp:ListItem Selected="True"></asp:ListItem>
                        <asp:ListItem>BSN EAP</asp:ListItem>
                        <asp:ListItem>BSN NEA</asp:ListItem>
                        <asp:ListItem>BSNConnect.com</asp:ListItem>
                        <asp:ListItem>BSNDMZ.COM</asp:ListItem>
                        <asp:ListItem>Dow EAP</asp:ListItem>
                        <asp:ListItem>Dow NEA</asp:ListItem>
                     </asp:DropDownList>
                     <asp:RequiredFieldValidator ID="rfvArchitecture" runat="server" ControlToValidate="DropDownArchitecture" ErrorMessage="Required" ForeColor="Red"></asp:RequiredFieldValidator>
                 </FooterTemplate>
             </asp:TemplateField>
            <asp:TemplateField HeaderText="Database_Type" SortExpression="Database_Type">
                <ItemTemplate>
                    <asp:Label ID="lblDatabaseType" runat="server" Text='<%# Eval("Database_Type") %>'></asp:Label>
                </ItemTemplate>
                <EditItemTemplate>
                    <asp:DropDownList ID="DropDownDataType" runat="server" >
                        <asp:ListItem Selected="True"></asp:ListItem>
                        <asp:ListItem>Oracle</asp:ListItem>
                        <asp:ListItem>SQL Server</asp:ListItem>
                     </asp:DropDownList>
                </EditItemTemplate>
                <FooterTemplate>
                     <asp:DropDownList ID="DropDownDataType" runat="server" AutoPostBack="True">
                        <asp:ListItem Selected="True"></asp:ListItem>
                        <asp:ListItem>Oracle</asp:ListItem>
                        <asp:ListItem>SQL Server</asp:ListItem>
                     </asp:DropDownList>
                     <asp:RequiredFieldValidator ID="rfvDatabaseType" runat="server" ControlToValidate="DropDownDataType" ErrorMessage="Required" ForeColor="Red"></asp:RequiredFieldValidator>
                 </FooterTemplate>
             </asp:TemplateField>
            <asp:TemplateField HeaderText="Life_Cycle_Stage" SortExpression="Life_Cycle_Stage">
                <ItemTemplate>
                    <asp:Label ID="lblLCS" runat="server" Text='<%# Eval("Life_Cycle_Stage") %>'></asp:Label>
                </ItemTemplate>
                <EditItemTemplate>
                    <asp:DropDownList ID="DropDownLCS" runat="server">
                        <asp:ListItem Selected="True"></asp:ListItem>
                        <asp:ListItem>Dev</asp:ListItem>
                        <asp:ListItem>Prod</asp:ListItem>
                        <asp:ListItem>Test</asp:ListItem>
                     </asp:DropDownList>
                </EditItemTemplate>
                <FooterTemplate>
                     <asp:DropDownList ID="DropDownLCS" runat="server">
                        <asp:ListItem Selected="True"></asp:ListItem>
                        <asp:ListItem>Dev</asp:ListItem>
                        <asp:ListItem>Prod</asp:ListItem>
                        <asp:ListItem>Test</asp:ListItem>
                     </asp:DropDownList>
                     <asp:RequiredFieldValidator ID="rfvLCS" runat="server" ControlToValidate="DropDownLCS" ErrorMessage="Required" ForeColor="Red"></asp:RequiredFieldValidator>
                 </FooterTemplate>
             </asp:TemplateField>
            <asp:TemplateField HeaderText="Restriction" SortExpression="Restriction">
                <ItemTemplate>
                    <asp:Label ID="lblRestriction" runat="server" Text='<%# Eval("Restriction") %>'></asp:Label>
                </ItemTemplate>
                <EditItemTemplate>
                    <asp:DropDownList ID="DropDownRestriction" runat="server">
                        <asp:ListItem Selected="True"></asp:ListItem>
                        <asp:ListItem>Export Controlled</asp:ListItem>
                        <asp:ListItem>SOX Critical</asp:ListItem>
                        <asp:ListItem>Standard</asp:ListItem>
                     </asp:DropDownList>
                </EditItemTemplate>
                <FooterTemplate>
                     <asp:DropDownList ID="DropDownRestriction" runat="server">
                        <asp:ListItem Selected="True"></asp:ListItem>
                        <asp:ListItem>Export Controlled</asp:ListItem>
                        <asp:ListItem>SOX Critical</asp:ListItem>
                        <asp:ListItem>Standard</asp:ListItem>
                     </asp:DropDownList>
                     <asp:RequiredFieldValidator ID="rfvRestriction" runat="server" ControlToValidate="DropDownRestriction" ErrorMessage="Required" ForeColor="Red"></asp:RequiredFieldValidator>
                 </FooterTemplate>
             </asp:TemplateField>
            <asp:TemplateField HeaderText="Business_Continuity_Plan" SortExpression="Business_Continuity_Plan">
                <ItemTemplate>
                    <asp:Label ID="lblBCP" runat="server" Text='<%# Eval("Business_Continuity_Plan") %>'></asp:Label>
                </ItemTemplate>
                <EditItemTemplate>
                    <asp:TextBox ID="txtBCP" runat="server" Text='<%# Eval("Business_Continuity_Plan") %>'></asp:TextBox>
                </EditItemTemplate>
                <FooterTemplate>
                     <asp:TextBox ID="txtBCP" runat="server"></asp:TextBox>
                     <asp:RequiredFieldValidator ID="rfvBCP" runat="server" ControlToValidate="txtBCP" ErrorMessage="Required" ForeColor="Red"></asp:RequiredFieldValidator>
                 </FooterTemplate>
             </asp:TemplateField>
            <asp:TemplateField HeaderText="Tenant_Code" SortExpression="Tenant_Code">
                <ItemTemplate>
                    <asp:Label ID="lblTenantCode" runat="server" Text='<%# Eval("Tenant_Code") %>'></asp:Label>
                </ItemTemplate>
                <EditItemTemplate>
                    <asp:TextBox ID="txtTenantCode" runat="server" Text='<%# Eval("Tenant_Code") %>'></asp:TextBox>
                </EditItemTemplate>
                <FooterTemplate>
                     <asp:TextBox ID="txtTenantCode" runat="server"></asp:TextBox>
                     <asp:RequiredFieldValidator ID="rfvTenantCode" runat="server" ControlToValidate="txtTenantCode" ErrorMessage="Required" ForeColor="Red"></asp:RequiredFieldValidator>
                 </FooterTemplate>
             </asp:TemplateField>
            <asp:CommandField ShowDeleteButton="True" ShowEditButton="True" CausesValidation="false" />
            <asp:TemplateField HeaderText="" SortExpression="Insert">                  
                <FooterTemplate>
                    <asp:LinkButton ID="lnkInsert" runat="server" Text ="Insert" OnClick="lnkInsert_Click"></asp:LinkButton>
                    </FooterTemplate>
            </asp:TemplateField>
        </Columns>
        <FooterStyle BackColor="White" ForeColor="#000066" />
        <HeaderStyle BackColor="#006699" Font-Bold="True" ForeColor="White" />
        <PagerStyle BackColor="White" ForeColor="#000066" HorizontalAlign="Left" />
        <EditRowStyle BackColor="White" />
        <RowStyle ForeColor="#000066" />
        <SelectedRowStyle BackColor="#669999" Font-Bold="True" ForeColor="White" />
        <SortedAscendingCellStyle BackColor="#F1F1F1" />
        <SortedAscendingHeaderStyle BackColor="#007DBB" />
        <SortedDescendingCellStyle BackColor="#CAC9C9" />
        <SortedDescendingHeaderStyle BackColor="#00547E" />
    </asp:GridView>

【问题讨论】:

  • 您是否遇到任何错误......?首先,当您连接到数据库以及执行查询的位置时,我建议将您的代码包装在 using 和 try {}catch{} 中,如果您遇到任何错误,也会报告..

标签: c# asp.net sql-server gridview


【解决方案1】:

您使用的是Label 而不是Label.Text 属性。

所以您正在编辑/删除 0 行。 代码应该是:

    SqlConnection conn = new SqlConnection(ConfigurationManager.ConnectionStrings["Database_Shared_NotebookConnectionString"].ConnectionString);
    SqlCommand cmd = new SqlCommand("delete from tblServer where ServerName = '" + servername.Text + "'", conn);

    SqlConnection conn = new SqlConnection(ConfigurationManager.ConnectionStrings["Database_Shared_NotebookConnectionString"].ConnectionString);
    SqlCommand cmd = new SqlCommand("update tblServer set ClusterName = @ClusterName, Architecture = @Architecture, Database_Type = @DataType, Restriction = @Restriction, Business_Continuity_Plan = @BCP, Tenant_Code = @TenantCode where ClusterName =  '" + servername.Text + "'", conn);

注意 servername.Text 已修改。

【讨论】:

  • 我很惊讶它正在编译......我认为它必须在 WHERE 子句中使用“System.Web.UI.WebControls.Label”(我怀疑你有一个名为 adter 的服务器)。
  • 我根据您上面提到的内容进行了修复。删除部分有效,但编辑部分仍然存在问题。我确实更改了 servername.Text 并将 WHERE 子句从 ClusterName 修复为 ServerName。错误结果显示“NullReferenceException”,对象引用未设置为更新查询中 sername.Text 上的对象实例。
  • 您正在 RowUpdating 方法中寻找“lblServerName”,但我认为应该是“txtServerName”,因为 EditItemTemplate 有一个带有该名称但没有标签的文本框。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-08-05
  • 2016-08-18
  • 1970-01-01
相关资源
最近更新 更多