假设我有这个表结构:
为了查询这两个表的REQUEST,我创建了一个带有UNION的视图。
因此,ID 的INVOICE_REQUEST_ID
和DELIVERY_REQUEST_ID
都被查询为REQUEST_ID
。为了识别类型,我创建了一个dummy flag REQUEST_TYPE
。正如我预测的那样,当我尝试将数据绑定到 aGridView
时,会发生错误:已添加具有相同键的项目。
更新
我在GridViewControl.ascx上将自定义 GridView 与 CheckBox 一起使用:
<asp:Panel ID="pnlPc" runat="server" CssClass="div-grid" ScrollBars="Auto">
<asp:GridView ID="gvListing" runat="server" AllowPaging="True" AutoGenerateSelectButton="true"
OnRowDataBound="gvListing_RowDataBound" skinid="gvListing"
onselectedindexchanged="gvListing_SelectedIndexChanged"
onpageindexchanging="gvListing_PageIndexChanging" PageSize="50" >
<FooterStyle CssClass="grid-footer" />
<Columns>
<asp:TemplateField HeaderText="CheckAll">
<HeaderTemplate>
<asp:CheckBox ID="chkSelectAll" runat="server" AutoPostBack="true"
OnCheckedChanged="chkSelectAll_CheckedChanged" CssClass="select-all"/>
</HeaderTemplate>
<ItemTemplate>
<asp:CheckBox ID="chkSelect" runat="server" AutoPostBack="true"
OnCheckedChanged="chkSelect_CheckedChanged" CssClass="listing-checkbox"/>
</ItemTemplate>
</asp:TemplateField>
</Columns>
</asp:GridView>
</asp:Panel>
并使用此 C# 代码绑定数据:
//assuming that ucLAD is the CustomGridView
ucLAD.DataKeyName = def.ID_REQUEST; // here I assign the DataKeyName
ucLAD.BindGrid(dt); //dt is a datatable that contains my view
我的决议是:
- 忽略 try-catch 中的错误。(我怎样才能做到这一点?)
- 为
REQUEST_ID
and创建复合键REQUEST_TYPE
。 - 为两种请求类型创建一个虚拟密钥。