【问题标题】:Update a row in GridView ASP NET doesn't work在 GridView ASP NET 中更新一行不起作用
【发布时间】:2018-02-21 18:35:20
【问题描述】:

我是新的 ASP.NET 开发人员,正在尝试更新 GridView 中的一行。我尝试了很多解决方案,但它不起作用。当我更新一行时,不是错误消息,而是不考虑更新。

<asp:GridView ID="grd_quest" Visible = "False" runat="server" CellPadding="4" 
                  DataSourceID="ERP_questionn" ForeColor="#333333" GridLines="None" 
                  AutoGenerateColumns="False" DataKeyNames="QUE_id">
                <AlternatingRowStyle BackColor="White" ForeColor="#284775" />
    <Columns>
        <asp:CommandField ShowEditButton="true" />  

        <asp:BoundField DataField="QUE_id" HeaderText="ID" ReadOnly="True" 
            SortExpression="QUE_id" ItemStyle-Width="10%" />
        <asp:BoundField DataField="QUE_libelle" HeaderText="Libelle" 
            SortExpression="QUE_libelle" />

    </Columns>
    <EditRowStyle BackColor="#999999" />
    <FooterStyle BackColor="#5D7B9D" Font-Bold="True" ForeColor="White" />
    <HeaderStyle 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>

<asp:SqlDataSource ID="ERP_questionn" runat="server" 
      ConnectionString="<%$ ConnectionStrings:ERPConnectionString %>" 
      SelectCommand="" 
      UpdateCommand=
      "UPDATE [TR_QUESTION] SET [QUE_libelle] = @QUE_libelle WHERE [QUE_id] = @QUE_id">
    <UpdateParameters>
        <asp:Parameter Name="QUE_libelle" Type="String" />
        <asp:Parameter Name="QUE_id" Type="Int32" />
    </UpdateParameters>
</asp:SqlDataSource>

这里没有写选择命令,因为它改变了其他列表的功能,所以我用C#写了SelectCommand。 我希望这对你来说很清楚

[编辑]

我曾在 C# 中尝试过其他解决方案:

protected void grd_quest_RowUpdating(object sender, GridViewUpdateEventArgs e)
    {
        SqlConnection sqlConnection1 = new SqlConnection(connectionString);
        int id = Convert.ToInt32(grd_quest.DataKeys[e.RowIndex].Value.ToString());
        GridViewRow row = (GridViewRow)grd_quest.Rows[e.RowIndex];

        //TextBox txtname=(TextBox)gr.cell[].control[];  

        TextBox textadd = (TextBox)row.Cells[2].Controls[0];

        //TextBox textadd = (TextBox)row.FindControl("txtadd");  
        //TextBox textc = (TextBox)row.FindControl("txtc");  
        grd_quest.EditIndex = -1;
        sqlConnection1.Open();
        //SqlCommand cmd = new SqlCommand("SELECT * FROM detail", conn);  
        SqlCommand cmd = new SqlCommand("UPDATE TR_QUESTION SET QUE_libelle = @p_libelle where QUE_id = @p_id ", sqlConnection1);
        cmd.Parameters.AddWithValue("@p_id", id);
        cmd.Parameters.AddWithValue("@p_libelle", textadd.Text);         
        cmd.ExecuteNonQuery();
        sqlConnection1.Close();
        grd_quest.DataBind();

    }

但它也不起作用,我有一条错误消息说:

除非指定了 UpdateCommand,否则数据源“ERP_questionn”不支持更新。我尝试过:UpdateCommand = "" 但它也不起作用

[编辑新尝试]

    protected void grd_quest_RowUpdating(object sender, GridViewUpdateEventArgs e)
    {

        string id = grd_quest.DataKeys[e.RowIndex].Value.ToString();
        string libelle = ((TextBox)grd_quest.Rows[e.RowIndex].Cells[2].Controls[0]).Text;
        ERP_questionn.UpdateParameters["QUE_id"].DefaultValue = id;
        ERP_questionn.UpdateParameters["QUE_libelle"].DefaultValue = libelle;
        ERP_questionn.Update();
        //ERP_questionn.SelectCommand = DropDownList1.SelectedValue;

    }

当我更新一行时,不是错误消息,而是不考虑更新。

[编辑]

也许这可以帮助,在我的 gridView 中显示我的数据我这样做了:

protected void lst_facteur_SelectedIndexChanged(object sender, EventArgs e)
    {
        if (lst_pos.SelectedValue == "1")
        {
            ERP_questionn.SelectCommand = "select * FROM TR_QUESTION WHERE FAC_id =" + lst_facteur.SelectedValue + " AND QUE_ordreUsine IS NOT NULL";

        }
        else if (lst_pos.SelectedValue == "2")
        {
            ERP_questionn.SelectCommand = "select * FROM TR_QUESTION WHERE FAC_id =" + lst_facteur.SelectedValue + " AND QUE_ordreBureau IS NOT NULL";
        }

        grd_quest.DataBind();
        grd_quest.Visible = true;
        txt_question.Visible = true;
        btn_add_question.Visible = true;

我老是更新问题...

【问题讨论】:

  • 我在下面添加了一个答案,其中包含使用 UpdateCommand 的链接

标签: c# asp.net gridview sqldatasource


【解决方案1】:
"UPDATE [TR_QUESTION] SET [QUE_libelle] =? WHERE [QUE_id] =?"

除此之外,您还没有在 gridview 上设置更新命令事件。

onrowupdated="CustomersGridView_RowUpdated"

【讨论】:

    【解决方案2】:

    您还必须在 HTML 代码中设置SelectCommand = "SELECT * FROM [TR_QUESTION]"

    <asp:GridView ID="grd_quest" runat="server" AutoGenerateColumns="False" DataKeyNames="QUE_id" DataSourceID="ERP_questionn">
        <Columns>
            <asp:CommandField ShowEditButton="True" />
            <asp:BoundField DataField="QUE_id" HeaderText="ID" InsertVisible="False" ReadOnly="True" SortExpression="QUE_id" />
            <asp:BoundField DataField="QUE_libelle" HeaderText="Libelle" SortExpression="QUE_libelle" />
        </Columns>
    </asp:GridView>
    
    <asp:SqlDataSource ID="ERP_questionn" runat="server" 
          ConnectionString="<%$ ConnectionStrings:ERPConnectionString %>" 
          SelectCommand = "SELECT * FROM [TR_QUESTION]" 
          UpdateCommand = 
          "UPDATE [TR_QUESTION] SET [QUE_libelle] = @QUE_libelle WHERE [QUE_id] = @QUE_id">
    </asp:SqlDataSource>
    

    【讨论】:

    • 非常感谢您的回答!我已经这样做了:OnRowUpdating="grd_quest_RowUpdating。但是当我尝试你的解决方案时,我有这个错误:“'?'附近的语法不正确。”也许我需要一个 c# 代码?但是什么?
    • 对不起!我没有看到链接,我在示例中做了同样的事情,但我有同样的错误:“'?'附近的语法不正确。”只是我没有这样做 ProviderName="System.Data.Odbc" 因为这个元素会产生错误:ERROR [IM002] [Microsoft][Gestionnaire de Pilotes ODBC] Data source not found and driver name unspecified
    • 我已经尝试过了,但是当我点击更新时没有任何反应,当我检查数据库时更新不起作用
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多