ASP Net Gridview错误具有相同ID的两个组件无法添加到应用程序中

时间:2012-11-30 16:34:39

标签: asp.net

我有一个通过联合多个表构建的gridview。每个表都有一个名为Pkey的主键。我的问题是,当显示数据时,gridview在遇到相同的Pkey编号时会出错。

Here is the query
SELECT Pkey, Status, EffectiveDate, 'Budget Element' as RequestType, DescribeRequest
FROM tblBudgetElement
union
SELECT Pkey, Status, EffectiveDate, 'Expense Element' as RequestType, DescribeRequest
FROM tblExpenseElement
union
SELECT Pkey, Status, EffectiveDate, 'Expense Hl' as RequestType, DescribeRequest
FROM tblExpenseHLevel

我尝试过使用简单的绑定字段。并尝试在后面的代码中创建一个超链接字段。

这是gridview                                               

                <asp:BoundField DataField="Pkey" HeaderText="Pkey">
                    <HeaderStyle HorizontalAlign="Left" />
                    <ItemStyle HorizontalAlign="Left" />
                </asp:BoundField>

                <asp:BoundField DataField="RequestType" HeaderText="Request Type">
                    <HeaderStyle HorizontalAlign="Left" />
                    <ItemStyle HorizontalAlign="Left" />
                </asp:BoundField>

                <asp:BoundField DataField="Status" HeaderText="Status">
                    <HeaderStyle HorizontalAlign="Left" />
                    <ItemStyle HorizontalAlign="Left" />
                </asp:BoundField>

                <asp:BoundField DataField="EffectiveDate" HeaderText="Effective Date"  DataFormatString = "{0:d}" >
                    <HeaderStyle HorizontalAlign="center" />
                    <ItemStyle HorizontalAlign="center" />
                </asp:BoundField>

                <asp:BoundField DataField="DescribeRequest" HeaderText="Describe Request">
                    <HeaderStyle HorizontalAlign="Left" />
                    <ItemStyle HorizontalAlign="Left" />
                </asp:BoundField>

                <asp:TemplateField>
                    <HeaderStyle VerticalAlign="Top" BorderWidth="0"/>
                    <ItemStyle BorderWidth="0"/>
                    <ItemTemplate>
                <asp:Image runat="server" BorderStyle="None" ID="Image1" ImageUrl="~/Images/MagnifyingClass.gif" />

                        <cc1:PopupControlExtender ID="PopupControlExtender1" runat="server" 
                           PopupControlID="Panel1" 
                           TargetControlID="Image1" 
                           DynamicContextKey='<%# Eval("Pkey") %>' 
                           DynamicControlID="Panel1" 
                           DynamicServiceMethod="GetRequest" Position="right"> 
                        </cc1:PopupControlExtender> 
                        <asp:Panel ID="Panel1" runat="server"></asp:Panel>                
                    </ItemTemplate>
                    <ItemStyle HorizontalAlign="Center" />
                </asp:TemplateField>

            </Columns>
            <PagerStyle BackColor="#999999" ForeColor="Black" HorizontalAlign="Center" />
            <SelectedRowStyle BackColor="#000099" Font-Bold="True" ForeColor="White" />
            <HeaderStyle BackColor="Silver" Font-Bold="True" ForeColor="Black" />
            <AlternatingRowStyle BackColor="#CCCCCC" />
        </asp:GridView>

1 个答案:

答案 0 :(得分:0)

我不认为问题出在GridView定义中,而是出现在SQL查询中。在不知道数据库结构的情况下,看起来每个表都有自己的PKey值,所以当然你会遇到重复的值。我敢打赌(虽然你没有显示你的GridView代码的一部分)你有“PKey”定义为GridView的DataKeyValue。

再次不知道数据库结构,我猜测查询可以用不同的方式编写(或者稍微修改一下数据库)来检索你需要的行,每个行都有一个唯一的键。