0

我有一个包含数据绑定项目的网格视图。它绑定到 SQLDATASOURCE。默认的编辑,更新工作正常,但是,当用户更新行时,我也想执行查询。
这是我的aspx

  <asp:GridView ID="GridView1" runat="server" AutoGenerateColumns="False" DataKeyNames="Customer_id"
        DataSourceID="SqlDataSource1" 
        EmptyDataText="There are no data records to display." AllowPaging="True" 
        AllowSorting="True" CellPadding="4" ForeColor="#333333" GridLines="Horizontal" 
        PageSize="5" Width="873px"  OnRowCommand = "RunCustomMethod" >
        <AlternatingRowStyle BackColor="White" ForeColor="#284775" />
        <Columns>
            <asp:TemplateField>
                <EditItemTemplate>
                    <asp:LinkButton ID="LinkButton1" runat="server" CausesValidation="True"
                        CommandName="myCustomUpdateMethod" Text="Update" CommandArgument = '<%# Eval("Customer_ID") %>'
                        onclientclick="return Confirm ('Are You Sure You Want To Make These Changes?')"></asp:LinkButton>
                    &nbsp;<asp:LinkButton ID="LinkButton2" runat="server" CausesValidation="False" 
                        CommandName="Cancel" Text="Cancel"></asp:LinkButton>
                </EditItemTemplate>
                <ItemTemplate>
                    <asp:LinkButton ID="LinkButton1" runat="server" CausesValidation="False" 
                        CommandName="Edit" Text="Edit" ></asp:LinkButton>
                    &nbsp;
                    <asp:LinkButton ID="LinkButton2" runat="server" CausesValidation="False" 
                        CommandName="Select" Text="Select"></asp:LinkButton>
                    &nbsp;
                 </ItemTemplate>
            </asp:TemplateField>
            <asp:BoundField DataField="Customer_id" HeaderText="Customer_id" ReadOnly="True"
                SortExpression="Customer_id" InsertVisible="False" />
            <asp:TemplateField HeaderText="Customer_Name" SortExpression="Customer_Name">
                <EditItemTemplate>
                    <asp:TextBox ID="TextBox1" runat="server" Text='<%# Bind("Customer_Name") %>'></asp:TextBox>
                </EditItemTemplate>
                <ItemTemplate>
                    <asp:Label ID="Label1" runat="server" Text='<%# Bind("Customer_Name") %>'></asp:Label>
                </ItemTemplate>
            </asp:TemplateField>

        </Columns>

    </asp:GridView>

这是我的 c# 代码

  protected void RunCustomMethod(object sender, GridViewCommandEventArgs e)
        {
                // Custom Method To Update Row
            if (e.CommandName == "myCustomUpdateMethod")
            {
                int customerID = Convert.ToInt32(e.CommandArgument);

                   SqlConnection conn = new SqlConnection(SqlDataSource1.ConnectionString);
                SqlCommand Cmd = new SqlCommand();

                try
                {
                    conn.Open();

                    Cmd.CommandText = "update Customers set customer_name = '" + **I WANT TO GET THE UPDATED VALUE BUT FROM WHERE SHALL I GET IT?????** + "', modified_on = getdate(), modified_by = '" + System.Environment.UserName + "' where customer_id = '" + customerID + "'";
                    Cmd.CommandType = System.Data.CommandType.Text;
                    Cmd.Connection = conn;

                    Cmd.ExecuteNonQuery();
                    GridView1.DataBind();

                    // Close the Edit Mode
                    GridView1.EditIndex = -1;

                }
                catch (SqlException ee)
                {

                    ValidationError.Display(ee.Message);

                }

                finally
                {
                    Cmd.Dispose();
                    conn.Close();
                    conn.Dispose();

                }
            }

        }

    }

任何帮助将不胜感激

4

3 回答 3

3

尝试这样的事情:

string newTitle = ((TextBox)GridView_Galerie.Rows[e.RowIndex].FindControl("tb_titre")).Text;
于 2012-09-14T09:52:40.423 回答
2

我认为您正在寻找的代码是:

GridViewRow row = (GridViewRow)(((LinkButton)e.CommandSource).NamingContainer);
string name = ((TextBox)row.FindControl("TextBox1")).Text

Cmd.CommandText = "update Customers set customer_name = '" + name + "', modified_on = getdate(), modified_by = '" + System.Environment.UserName + "' where customer_id = '" + customerID + "'";
于 2012-09-14T09:47:09.123 回答
0

您正在收听错误的事件。如果您想在数据库中更新它们之前获取这些值,您应该监听该RowUpdating事件。

参考:行更新

protected void TaskGridView_RowUpdating(object sender, GridViewUpdateEventArgs e)
  {    
    //Retrieve the table from the session object.
    DataTable dt = (DataTable)Session["TaskTable"];

    //Update the values.
    GridViewRow row = TaskGridView.Rows[e.RowIndex];
    dt.Rows[row.DataItemIndex]["Id"] = ((TextBox)(row.Cells[1].Controls[0])).Text;
    dt.Rows[row.DataItemIndex]["Description"] = ((TextBox)(row.Cells[2].Controls[0])).Text;
    dt.Rows[row.DataItemIndex]["IsComplete"] = ((CheckBox)(row.Cells[3].Controls[0])).Checked;

    //Reset the edit index.
    TaskGridView.EditIndex = -1;

    //Bind data to the GridView control.
    BindData();
  }

同样有一个RowUpdated事件,如果您想在数据库中的值更新后运行查询。

于 2012-09-14T09:54:56.227 回答