0

複数のテーブルを結合して構築されたグリッドビューがあります。各テーブルには、Pkey と呼ばれる主キーがあります。私の問題は、データを表示するときに同じ 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

単純なバインド フィールドを使用してみました。コードビハインドでハイパーリンクフィールドを作成してみました。

ここにグリッドビューがあります

                <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>
4

1 に答える 1

0

問題は GridView の定義ではなく、SQL クエリにあると思います。データベースの構造を知らなくても、各テーブルには独自の PKey の値があるように見えるため、もちろん重複する値に遭遇することになります。そして、きっと (GridView コードのその部分は示していませんが)、GridView の DataKeyValue として "PKey" が定義されているはずです。

繰り返しますが、データベースの構造を知らなくても、必要な行を取得するためにクエリを別の方法で記述 (またはデータベースをわずかに変更) して、それぞれに一意のキーを使用できると思います。

于 2012-11-30T20:27:38.297 に答える