Overload/Override SQLDataSource 更新事件
Overload/Override SQLDataSource Update Events
我有一个 SqlDataSource
loads/selects 来自 ASP.net 方面的用户和角色信息很好。我喜欢利用自动生成的 edit/update link 按钮的功能(编辑事件看起来非常好,我希望能够使用它)。
但是,鉴于我 关于我应该如何 Insert/Delete 进入 AspNetUserRoles
table,我想包装 AspNetUsers
的更新Insert/Delete 查询到一笔交易中。
如果我为 GridView.RowUpdating
事件分配了一个子程序,我能够使代码工作,但是 SqlDataSource
的 "main" 更新命令似乎在事实上。
有没有办法覆盖自动生成的 SqlDataSource
事件?我查看了 this,但它并没有真正理解我想要做的事情。
我认为是因为我正在尝试更新两个 table,并且对于一个 table 使用 Insert/Delete 命令,并且因为我需要操纵从中获取值的变量编辑行(从 RoleName
中查找 RoleID
),我真的需要覆盖它。
到目前为止,我只有 found examples of people who really didn't need to override 自动生成的脚本,而不是有人做过的示例。在那种情况下,有没有办法为此更改初始设置?我不这么认为,但也许我错了。
下面是我正在使用的 GridView
和 SqlDataSource
。我认为我的实际 sub 很好,因为它正确触发,而不是更新命令(在这里开玩笑)。
<asp:GridView ID="URdataGridView" runat="server"
AllowPaging="True" AllowSorting="True" AutoGenerateColumns="False"
CellPadding="4" DataSourceID="MainUser" ForeColor="#333333"
GridLines="None" DataKeyNames="Id">
<AlternatingRowStyle BackColor="White" ForeColor="#284775" />
<Columns>
<asp:CommandField ShowDeleteButton="True" ShowEditButton="True" />
<asp:BoundField DataField="Id" HeaderText="Id" SortExpression="Id" ReadOnly="True" />
<asp:BoundField DataField="UserName" HeaderText="UserName" SortExpression="UserName" />
<asp:BoundField DataField="Email" HeaderText="Email" SortExpression="Email" />
<asp:BoundField DataField="PhoneNumber" HeaderText="PhoneNumber" SortExpression="PhoneNumber" />
<asp:BoundField DataField="Name" HeaderText="Name" SortExpression="Name" />
<asp:CheckBoxField DataField="LockoutEnabled" HeaderText="LockoutEnabled" SortExpression="LockoutEnabled" />
</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="MainUser" runat="server"
ConnectionString="<%$ ConnectionStrings:DefaultConnection %>"
DeleteCommand="DeleteUserOnlyQuery" DeleteCommandType="StoredProcedure"
SelectCommand="SelectUsersRoles" SelectCommandType="StoredProcedure"
UpdateCommand="UpdateUserOnlyQuery" UpdateCommandType="StoredProcedure">
<DeleteParameters>
<asp:Parameter Name="original_Id" />
<asp:Parameter Name="original_Email" />
<asp:Parameter Name="original_UserName" />
<asp:Parameter Name="original_PhoneNumber" />
<asp:Parameter Name="original_LockoutEnabled" />
</DeleteParameters>
<UpdateParameters>
<asp:Parameter Name="original_Id" />
<asp:Parameter Name="Email" />
<asp:Parameter Name="UserName" />
<asp:Parameter Name="PhoneNumber" />
<asp:Parameter Name="LockoutEnabled" />
</UpdateParameters>
</asp:SqlDataSource>
是的,有一种方法可以覆盖 Update
。为此,你需要订阅 Updating 事件,做任何你想做的事,然后取消数据库操作,或者继续。在代码中:
<asp:SqlDataSource ID="MainUser" runat="server"
OnUpdating="MainUser_Updating"
...
protected void MainUser_Updating(Object source, SqlDataSourceCommandEventArgs e)
{
// here run your custom logic
// perhaps use e.Command to see parameters and such
// you can even do DB updates here manually
// ....
// if you still want initial DB update to occur, simply do nothing in the end
// if however you need to cancel the DB operation, indicate that
e.Cancel = true;
}
我有一个 SqlDataSource
loads/selects 来自 ASP.net 方面的用户和角色信息很好。我喜欢利用自动生成的 edit/update link 按钮的功能(编辑事件看起来非常好,我希望能够使用它)。
但是,鉴于我 AspNetUserRoles
table,我想包装 AspNetUsers
的更新Insert/Delete 查询到一笔交易中。
如果我为 GridView.RowUpdating
事件分配了一个子程序,我能够使代码工作,但是 SqlDataSource
的 "main" 更新命令似乎在事实上。
有没有办法覆盖自动生成的 SqlDataSource
事件?我查看了 this,但它并没有真正理解我想要做的事情。
我认为是因为我正在尝试更新两个 table,并且对于一个 table 使用 Insert/Delete 命令,并且因为我需要操纵从中获取值的变量编辑行(从 RoleName
中查找 RoleID
),我真的需要覆盖它。
到目前为止,我只有 found examples of people who really didn't need to override 自动生成的脚本,而不是有人做过的示例。在那种情况下,有没有办法为此更改初始设置?我不这么认为,但也许我错了。
下面是我正在使用的 GridView
和 SqlDataSource
。我认为我的实际 sub 很好,因为它正确触发,而不是更新命令(在这里开玩笑)。
<asp:GridView ID="URdataGridView" runat="server"
AllowPaging="True" AllowSorting="True" AutoGenerateColumns="False"
CellPadding="4" DataSourceID="MainUser" ForeColor="#333333"
GridLines="None" DataKeyNames="Id">
<AlternatingRowStyle BackColor="White" ForeColor="#284775" />
<Columns>
<asp:CommandField ShowDeleteButton="True" ShowEditButton="True" />
<asp:BoundField DataField="Id" HeaderText="Id" SortExpression="Id" ReadOnly="True" />
<asp:BoundField DataField="UserName" HeaderText="UserName" SortExpression="UserName" />
<asp:BoundField DataField="Email" HeaderText="Email" SortExpression="Email" />
<asp:BoundField DataField="PhoneNumber" HeaderText="PhoneNumber" SortExpression="PhoneNumber" />
<asp:BoundField DataField="Name" HeaderText="Name" SortExpression="Name" />
<asp:CheckBoxField DataField="LockoutEnabled" HeaderText="LockoutEnabled" SortExpression="LockoutEnabled" />
</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="MainUser" runat="server"
ConnectionString="<%$ ConnectionStrings:DefaultConnection %>"
DeleteCommand="DeleteUserOnlyQuery" DeleteCommandType="StoredProcedure"
SelectCommand="SelectUsersRoles" SelectCommandType="StoredProcedure"
UpdateCommand="UpdateUserOnlyQuery" UpdateCommandType="StoredProcedure">
<DeleteParameters>
<asp:Parameter Name="original_Id" />
<asp:Parameter Name="original_Email" />
<asp:Parameter Name="original_UserName" />
<asp:Parameter Name="original_PhoneNumber" />
<asp:Parameter Name="original_LockoutEnabled" />
</DeleteParameters>
<UpdateParameters>
<asp:Parameter Name="original_Id" />
<asp:Parameter Name="Email" />
<asp:Parameter Name="UserName" />
<asp:Parameter Name="PhoneNumber" />
<asp:Parameter Name="LockoutEnabled" />
</UpdateParameters>
</asp:SqlDataSource>
是的,有一种方法可以覆盖 Update
。为此,你需要订阅 Updating 事件,做任何你想做的事,然后取消数据库操作,或者继续。在代码中:
<asp:SqlDataSource ID="MainUser" runat="server"
OnUpdating="MainUser_Updating"
...
protected void MainUser_Updating(Object source, SqlDataSourceCommandEventArgs e)
{
// here run your custom logic
// perhaps use e.Command to see parameters and such
// you can even do DB updates here manually
// ....
// if you still want initial DB update to occur, simply do nothing in the end
// if however you need to cancel the DB operation, indicate that
e.Cancel = true;
}