我有一个有数据绑定项目的gridview。它绑定到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>
<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>
<asp:LinkButton ID="LinkButton2" runat="server" CausesValidation="False"
CommandName="Select" Text="Select"></asp:LinkButton>
</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();
}
}
}
}
非常感谢任何帮助
答案 0 :(得分:3)
尝试这样的事情:
string newTitle = ((TextBox)GridView_Galerie.Rows[e.RowIndex].FindControl("tb_titre")).Text;
答案 1 :(得分: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 + "'";
答案 2 :(得分: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事件。