忽略“已添加具有相同键的项目。”

时间:2013-06-25 07:01:48

标签: c# asp.net sql gridview oracle11g

假设我有这个表结构:

enter image description here

要查询两个表的 REQUEST ,我使用 UNION 创建了一个视图。

因此,INVOICE_REQUEST_IDDELIVERY_REQUEST_ID的ID都被查询为REQUEST_ID。为了识别类型,我创建了一个虚拟标志 REQUEST_TYPE。当我尝试将数据绑定到GridView时,正如我预测的那样,会发生错误:已添加具有相同键的项目。

更新

我在 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

我的决心是:

  1. 忽略try-catch中的错误。 (我怎么能这样做?)
  2. REQUEST_IDREQUEST_TYPE创建复合键。
  3. 为两种请求类型创建一个虚拟密钥。

1 个答案:

答案 0 :(得分:0)

要将密钥设置为包含多个列,您只需设置DataKeyNames

即可
<asp:GridView ID="GridView1" runat="server" 
    AutoGenerateColumns="False" 
    DataKeyNames="REQUEST_ID,REQUEST_TYPE"
    DataSourceID="LinqDataSource1">