0

GridViewのasp.netの列を非表示にしてから、vb.netを使用してGridViewSelectIndexChangedの値にアクセスします。GridViewで非表示フィールドを使用しています。アクセスしようとすると、インスタンスに設定されていないエラーオブジェクト参照が表示されます。ここにコードがあります

<asp:GridView ID="GridView1" runat="server" OnSorting="GridView1_OnSorting" AllowPaging="True" AllowSorting="True" 
            AutoGenerateColumns="False"  
           BorderStyle="Outset" CellPadding="4" DataSourceID="odsA02_Tracking"
            ForeColor="#333333" GridLines="Vertical" Style="border-right: #0000ff thin solid;
            table-layout: auto; border-top: #0000ff thin solid; font-size: x-small; border-left: #0000ff thin solid;
            border-bottom: #0000ff thin solid; font-family: Arial; border-collapse: separate" Font-Size="Small" PageSize="30">
            <FooterStyle BackColor="#507CD1" Font-Bold="True" ForeColor="White" />
            <RowStyle BackColor="#EFF3FB" />
            <EditRowStyle BackColor="#2461BF" />
            <SelectedRowStyle BackColor="#D1DDF1" Font-Bold="True" ForeColor="#333333" />
            <PagerStyle BackColor="#2461BF" ForeColor="White" HorizontalAlign="Center" />
            <HeaderStyle BackColor="#507CD1" Font-Bold="True" ForeColor="White" />
            <AlternatingRowStyle BackColor="White" />
            <Columns>
                <asp:CommandField ShowSelectButton="True" />
                <asp:boundfield datafield="Since" HeaderText="Submit Date" ReadOnly=true SortExpression="Since" />

                <asp:BoundField DataField="Started_By" HeaderText="Submitted By" SortExpression="Started_By" />
                <asp:BoundField DataField="Client_FullName" HeaderText="Client Name" ReadOnly="True" SortExpression="Client_FullName" />
                <asp:BoundField DataField="Product_Desc" HeaderText="Product" ReadOnly="True" SortExpression="Product_Desc" />
                <asp:BoundField DataField="Branch_List" HeaderText="Branch" ReadOnly="True" SortExpression="Branch_List" />
                <asp:BoundField DataField="Event_AssignedID" HeaderText="Assigned To" ReadOnly="True"
                    SortExpression="Event_AssignedID" />
                <asp:BoundField DataField="DaysElapsed" HeaderText="Days Open" ReadOnly="True"  SortExpression="DaysElapsed" />
                <asp:BoundField DataField="Status" HeaderText="Status" SortExpression="Status" /> 
                <asp:TemplateField HeaderText=Instance_ID >
                <ItemTemplate>
                <asp:HiddenField ID=lblInstanceID Value='<%#Eval("Instance_ID") %>' runat=server>
                </asp:HiddenField>
                 </ItemTemplate>
                 </asp:TemplateField>
                <asp:TemplateField HeaderText=Seq_ID>
                <ItemTemplate>
                <asp:HiddenField ID=lblSeqID Value='<%#Eval("Seq_ID") %>' runat=server/>                 
                </ItemTemplate>             

                </asp:TemplateField>

                <asp:TemplateField HeaderText=Form_Code>
                <ItemTemplate>
                <asp:HiddenField ID=lblFormCode Value='<%#Eval("Form_Code") %>' runat=server/>                 
                </ItemTemplate>             

                </asp:TemplateField>



            </Columns>
        </asp:GridView>

 Protected Sub GridView1_SelectedIndexChanged(ByVal sender As Object, ByVal e As System.EventArgs) Handles GridView1.SelectedIndexChanged
        Dim Instance_ID As String
        Dim Seq_ID As String
        Dim Form_Code As String
        Dim PARMS As String
        Dim DestinationURL As String
        Dim DestinationParms As String
        Dim instanceID As String = CType(GridView1.FindControl("lblInstanceID"), HiddenField).Value
End sub
4

3 に答える 3

2

hiddenfields の代わりに datakeys を使用することを検討してください。

http://msdn.microsoft.com/en-us/library/system.web.ui.webcontrols.gridview.datakeys.aspx

データキーを使用すると、これを行うことができます...

<asp:GridView ID="GridView1" runat="server" datakeynames="instanceID" .../>

Protected Sub GridView1_SelectedIndexChanges(ByVal sender As Object, ByVal e As System.EventArgs) Handles GridView1.SelectedIndexChanged 
    Dim index As Integer = CustomersGridView.SelectedIndex
    Dim instanceID As String = GridView1.DataKeys(index).Value.ToString()
End Sub
于 2010-04-30T18:26:05.210 に答える
0

次のように、選択した行のみを検索してみてください。

Dim instanceID As String = 
CType(GridView1.SelectedRow.FindControl("lblInstanceID"), HiddenField).Value

また、これらの非表示フィールドが存在する列は非表示ですか? 存在する場合、FindControl はそれらを見つけられません。

于 2010-04-30T14:46:43.483 に答える
0

別のオプションとして、クライアント側で値にアクセスする必要がないと仮定すると、非表示フィールドの代わりにラベルを使用して、その可視性を false に設定できます。

于 2010-04-30T18:53:38.423 に答える