0

データベースからのデータを入力しているGridViewがあります。データは完全に表示されます。私の問題は、行をクリックして、その行にある情報を他の場所に表示できるようにしたいことです(最終的には、選択したデータを適切にフォーマットするための分割画面が表示されます)。現在の行が強調表示されるため、選択は機能します。ただし、そのデータを他の場所に表示する方法がわかりません。今のところ、testLabelというラベルの単一のセルのコンテンツを表示しようとしています。私はさまざまな方法を試しましたが、新しい行をクリックしてもtestLabelが更新されません。ここで何が悪いのか誰かがわかりますか?

C#

protected void DefaultGrid_SelectedIndexChanged(Object sender, EventArgs e)
{
    GridViewRow row = DefaultGrid.SelectedRow;
    testLabel.Text = row.Cells[2].Text;
}

ASPX

<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
    <title></title>
</head>
<body>
    <form id="form1" runat="server">
    <asp:ScriptManager ID = "ScriptManager" runat="server" />
    <div>
        <div>
            <asp:Label runat="server" id = "orderByLabel" Text = "Order By: " />


            <asp:DropDownList runat="server" ID="orderByList" AutoPostBack="true">
                <asp:ListItem Value="fName" Selected="True">First Name</asp:ListItem>
                <asp:ListItem Value="lName">Last Name</asp:ListItem>
                <asp:ListItem Value="state">State</asp:ListItem>
                <asp:ListItem Value="zip">Zip Code</asp:ListItem>
                <asp:ListItem Value="cwaSource">Source</asp:ListItem>
                <asp:ListItem Value="cwaJoined">Date Joined</asp:ListItem>
            </asp:DropDownList>
        </div>
        <div>
            <asp:Label runat="server" ID="searchLabel" Text="Search For: " />
            <asp:TextBox ID="searchTextBox" runat="server" Columns="30" />
            <asp:Button ID="searchButton" runat="server" Text="Search" />
        </div>
    <div align="center">
    <asp:UpdatePanel ID = "up" runat="server">
    <Triggers>
        <asp:AsyncPostBackTrigger ControlID = "orderByList"
        EventName="SelectedIndexChanged" />
         <asp:AsyncPostBackTrigger ControlId="searchButton" EventName="Click" />
    </Triggers>

    <ContentTemplate>
        <asp:GridView ID="DefaultGrid" runat = "server" DataKeyNames = "fName"
        onselectedindexchanged = "DefaultGrid_SelectedIndexChanged"
        autogenerateselectbutton = "true"
        selectedindex="0">
        <SelectedRowStyle BackColor="Azure"
        forecolor="Black"
        font-bold="true" />
        <Columns>
            <asp:ButtonField CommandName="Select" Visible="false" />
        </Columns>
        </asp:GridView>
        </ContentTemplate>
        </asp:UpdatePanel>



    </div>
    </div>
    <div>
        <asp:Label runat="server" ID="testLabel" Text="test" />
    </div>
    </form>
</body>
</html>
4

4 に答える 4

1

独自の選択ボタンを提供し、プロパティhttp://msdn.microsoft.com/en-us/library/system.web.ui.webcontrols.gridview.autogenerateselectbutton.aspxをtrueに設定しました。それらの1つだけを選択する必要があります。

編集:ああ、今それを見てください。ラベル'testLabel'はupdatepanelの外にあります。ContentTemplateに移動します。

于 2011-07-05T15:28:52.807 に答える
0

testLabelを別のUpdatePanel内に配置し、ラベルのテキストを変更した後に強制的に更新してみましたか?

于 2011-07-05T15:32:24.870 に答える
0

見た目では、動作しているはずです。ここにいくつかのポインタがあります:

  • にアクセスするときrow.Cells[2].Textは、インデックスがゼロベースであることに注意してください(最初のセルのインデックスは0です)。
  • 見えない固定列があります。表示されていませんが、その列は列のインデックス番号にカウントされます。
  • 内にブレークポイントを配置しますDefaultGrid_SelectedIndexChanged。そこに到達したら、変数を監視し、メソッドを呼び出して、可能性をいじくりまわします。それはあなたに大いに役立つはずです。
于 2011-07-05T15:35:38.900 に答える
0

私はあなたDefaultGrid_SelectedIndexChangedが呼ばれることはないと思います。これを確認してください:http://forums.asp.net/t/1448445.aspx

引用:

selectedIndexChangedイベントハンドラーをトリガーするには、ボタンフィールドまたはボタン、リンクボタン、イメージボタンなどのポストバックコントロールとcommandName="Select"が必要です。

于 2011-07-05T15:41:51.607 に答える