0

次のコードのグリッドビューがあります。

<asp:TemplateField HeaderText="Column1">
    <EditItemTemplate>
        <asp:Label ID="Label1" runat="server" Text='<%# Bind("Column1") %>'></asp:Label>
    </EditItemTemplate>
    <ItemTemplate>
        <asp:DropDownList ID="DropDownList1" runat="server" Width="125px">
    </asp:DropDownList>
    </ItemTemplate>
</asp:TemplateField>

ドロップダウンリストにデータを入力するためにSQLステートメントをバインドしたい...

select Column1 from Table1

コードビハインドを介してこれを行いますか?何か情報をいただければ幸いです。また、ユーザーがこのドロップダウンリストで行った選択に基づいて、次の列(column2)に対応するデータを入力したいと思います...それについても支援が必要です...

私はテンプレートフィールドに慣れていません。HTMLの背後およびHTMLを介してコードでgridviewバインディングを操作できますが、templatefieldsは別の言語のようなものです...助けてくれてありがとう!

4

1 に答える 1

0

あなたの質問への回答にはいくつかの部分があり、私はいくつかの仮定を立てています (IDE として Visual Studio を使用しており、コード ビハインド言語として VB を使用できます)。

SQL ステートメントをバインドしてドロップダウンリストに入力したい...

これは、コード ビハインドまたは Visual Studio GUI を使用して行うことができます。ドロップダウン リストにバインド フィールドを使用することもできますが、最終的にはテンプレート フィールドを使用すると柔軟性が向上します。基本的なデータ表示以外の目的で Gridview を使用するのはあなたの友人になるので、テンプレートフィールド ( here ) を読みます。GUI を使用してドロップダウンリストを選択すると、右上に小さな矢印が表示され、データ接続とデータソースを作成してドロップダウンリストにバインドできます。

また、ユーザーがこのドロップダウンリストで行った選択に基づいて、次の列 (column2) に対応するデータを入力したい

ドロップダウンリストで (AutoPostBack を使用して) PostBack をトリガーし、ドロップダウンリストの SelectedIndexChanged イベントを処理し、2 番目の列で更新​​するコントロールを見つけ、selectedindex/item/ に基づいてそのコントロールを更新する必要があるため、これはもう少し複雑です。ドロップダウンリストの値。これを行うにはいくつかの方法がありますが、これが私が見つけた最も速い方法です (asp.net winforms を使用)。SQL Adventureworks データベースを使用して、列 1 の templatefield のドロップダウンに employeeID を入力し、選択した employeeID を使用して列 2 のラベルにその employeeID の managerID を入力しています。

<asp:GridView ID="GridView1" runat="server" DataSourceID="SqlDataSource1" 
    EnableModelValidation="True" AutoGenerateColumns="False" 
    DataKeyNames="EmployeeID">
    <Columns>
        <asp:BoundField DataField="EmployeeID" HeaderText="EmployeeID" 
            InsertVisible="False" ReadOnly="True" SortExpression="EmployeeID" />
        <asp:TemplateField>
            <ItemTemplate>
                Select EmployeeID
                <asp:DropDownList ID="ddEmpID" runat="server" OnSelectedIndexChanged="ddEmpID_SelectedIndexChanged" 
                    DataSourceID="SqlDataSource1" DataTextField="EmployeeID" 
                    DataValueField="EmployeeID" AutoPostBack="True">
                </asp:DropDownList>
            </ItemTemplate>
        </asp:TemplateField>
        <asp:TemplateField>
            <ItemTemplate>
                <asp:Label ID="labManagerID" runat="server" Text="ManagerID"></asp:Label>
            </ItemTemplate>
        </asp:TemplateField>
    </Columns>
</asp:GridView>
<asp:SqlDataSource ID="SqlDataSource1" runat="server" 
    ConnectionString="Data Source=MyServer\Instance;Initial Catalog=AdventureWorks;Integrated Security=True" 
    ProviderName="System.Data.SqlClient" 
    SelectCommand="SELECT TOP(10) EmployeeID, ManagerID FROM HumanResources.Employee">
</asp:SqlDataSource>

コード ビハインドからの SelectedIndexChanged イベント:

Protected Sub ddEmpID_SelectedIndexChanged(sender As Object, e As EventArgs)
    Dim myDDList As DropDownList = CType(sender, DropDownList)
    Dim gvRow As GridViewRow = CType(myDDList.NamingContainer, GridViewRow)
    Dim myLabel As Label = CType(gvRow.FindControl("labManagerID"), Label)

    ' Create your sql query here to populate a data object and assign values throughout your row
        Dim myConnection As SqlConnection = New SqlConnection("Data Source=MyServer\Instance;Initial Catalog=AdventureWorks;Integrated Security=True")
        Dim myCmd As SqlCommand = New SqlCommand("Select ManagerID FROM HumanResources.Employee WHERE EmployeeID='" + myDDList.SelectedValue + "'", myConnection)

        If myConnection.State = ConnectionState.Closed Then myConnection.Open()
        myLabel.Text = myCmd.ExecuteScalar
        If myConnection.State = ConnectionState.Open Then myConnection.Close()

End Sub

また、Gridview を操作することは自責の念を抱かせることもあるため、いくつかの優れたウォークスルー チュートリアルを手元に用意しておくことをお勧めします。

-J

于 2012-05-23T17:54:02.283 に答える