【问题标题】:databind gridview edititemtemplate dropdownlist with sql statement使用 sql 语句数据绑定 gridview edititemtemplate 下拉列表
【发布时间】:2012-05-23 15:49:27
【问题描述】:

我有一个带有以下代码的网格视图:

<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 使用 gridview 绑定,但模板字段就像另一种语言...感谢帮助!

【问题讨论】:

    标签: asp.net sql gridview drop-down-menu templatefield


    【解决方案1】:

    你的问题的答案有几个部分,我做了一些假设(你使用 Visual Studio 作为你的 IDE,你可以使用 VB 作为你的代码隐藏语言):

    我想绑定一个sql语句来填充下拉列表...

    您可以在代码隐藏中或通过 Visual Studio GUI 执行此操作。虽然您可以为下拉列表使用绑定字段,但模板字段最终为您提供了更大的灵活性。我已经阅读了模板字段 (here),因为它将成为您使用 Gridview 进行基本数据显示之外的任何事情的朋友。使用 GUI,选择下拉列表应该会给您一个指向右上角的小箭头,这将允许您创建数据连接和数据源以绑定到您的下拉列表。

    还基于用户使用此下拉列表所做的选择,我 想用相应的数据填充下一列(column2)

    这有点复杂,因为您需要在 Dropdownlist 上触发 PostBack(使用 AutoPostBack),处理 Dropdownlist 的 SelectedIndexChanged 事件,在第二列中找到要更新的控件,并根据 selectedindex 更新该控件/item/value 从您的下拉列表中。有几种方法可以做到这一点,但这是我发现的最快的(使用 asp.net winforms)。我正在使用 SQL Adventureworks 数据库,在第 1 列的模板字段中使用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 有时是一种自我鞭笞的练习,我建议手头有一些好的 walkthrough tutorials

    -J

    【讨论】:

      猜你喜欢
      • 2012-08-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-05-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多