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イベントをリッスンする必要があります。

参照: 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 に答える