我的.aspx
文件中有一个GridView控件,由我的表填充( ID ,姓氏):
<asp:GridView
ID="gridView_1"
runat="server"
AutoGenerateColumns="False" <!-- used to customize my columns -->
DataKeyNames="Id"
DataSourceID="sqlDataSource_1"
OnRowUpdating="gridView_rolesTiers_RowUpdating">
<Columns>
<asp:BoundField
DataField="dbColumn_db"
HeaderText="Id"
InsertVisible="False"
ReadOnly="True" />
<asp:BoundField
DataField="dbColumn_Surname"
HeaderText="Surname"
SortExpression="RLT_Intitule">
<asp:CommandField
ShowEditButton="True" />
</Columns>
</asp:GridView>
我有一个关联的SqlDataSource,它允许我使用存储过程来显示我的 Surnames :
<asp:SqlDataSource
ID="sqlDataSource_1"
runat="server"
ConnectionString="<%$ ConnectionStrings:myConString %>"
SelectCommand="procedure_Select_surnames"
SelectCommandType="StoredProcedure">
</asp:SqlDataSource>
GridView
控件完美展示了我想要展示的内容。
问题:现在,如何在不离开当前页面的情况下通过存储过程更新行?
答案 0 :(得分:0)
我发现这个问题的答案不是我预期的那个,或者是如此复杂以至于需要改变我GridView
的结构。
对于那些搜索使用存储过程更新行的简单方法的人来说,这是一个快速解决方案:
第1步
在GridView
控件中添加CommandField以允许用户更新行。此CommandField
必须放入<Columns> <!-- here --> </Columns>
标记:
<asp:GridView
ID="gridView_1"
runat="server"
AutoGenerateColumns="False" <!-- used to customize my columns -->
DataKeyNames="Id"
DataSourceID="sqlDataSource_1"
OnRowUpdating="gridView_rolesTiers_RowUpdating">
<Columns>
<!-- your precedent rows -->
<asp:CommandField ShowEditButton="True" />
</Columns>
<!-- nexts attributes -->
</asp:GridView>
第2步
添加事件处理程序OnRowUpdating,当您按下按钮&#34;更新&#34;但在用户验证更新之前:
<asp:GridView
ID="gridView_1"
<!-- others parameters -->
OnRowUpdating="gridView_1_RowUpdating" />
<!-- ... -->
</asp:GridView>
第3步
您现在将更新我们刚添加的函数gridView_1_RowUpdating
以获取我们需要更新的变量。以下是更新存储过程的样子:
CREATE PROCEDURE [dbo].[storedProcedure_Update_Surnames]
@id int
, @surname varchar(50)
AS
UPDATE [dbo].[table_Surnames]
SET dbColumn_Surname = @surname
WHERE dbColumn_Id = @id
RETURN 0
以下是gridView_1_RowUpdating
方法的内容:
protected void gridView_1_RowUpdating(object sender, GridViewUpdateEventArgs e)
{
string surname = e.NewValues[0].ToString(); /* NewValues is the key */
string id = gridView_1.DataKeys[e.RowIndex].Values[0].ToString(); /* get the id */
sqlDataSource_1.UpdateCommand = "[storedProcedure_Update_Surnames] " + id + ", '" + surname +"'";
}
解释:
当您点击&#34;更新&#34;时,所有字段而不是密钥都变为textBox
。这些textBox包含您编辑的字段的新(或非)值。
所有这些值都存储在数组NewValues []中。您可以使用每个textBox更新的索引访问这些数据(从左到右为索引顺序,从0到n)。
要完成,我通过使用我需要的值正确填充参数来使用存储过程,并通过触发存储过程的行为自动更新该行。
希望对那些需要执行此类过程的人有所帮助。