您的问题的答案有几个部分,我做了一些假设(您使用 Visual Studio 作为您的 IDE,您可以使用 VB 作为您的代码隐藏语言):
我想绑定一个 sql 语句来填充下拉列表...
您可以在代码隐藏中或通过 Visual Studio GUI 执行此操作。虽然您可以为下拉列表使用绑定字段,但模板字段最终为您提供了更大的灵活性。我已经阅读了模板字段(此处),因为它将成为您使用 Gridview 进行基本数据显示之外的任何事情的朋友。使用 GUI,选择下拉列表应该会给您一个指向右上角的小箭头,这将允许您创建数据连接和数据源以绑定到您的下拉列表。
同样基于用户使用此下拉列表所做的选择,我想用相应的数据填充下一列(column2)
这有点复杂,因为您需要在 Dropdownlist 上触发 PostBack(使用 AutoPostBack),处理 Dropdownlist 的 SelectedIndexChanged 事件,在第二列中找到要更新的控件,并根据 selectedindex/item/ 更新该控件下拉列表中的值。有几种方法可以做到这一点,但这是我发现的最快的(使用 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 有时是一种自我鞭挞的练习,我建议手头有一些好的演练教程:
-J