如何使用 C# 将数据源分配给 gridview ASP.net 中中继器内的下拉列表
how to assign a datasource to a dropdownlist inside a repeater in a gridview ASP.net with C#
这是我的 aspx 页面:我想将一列绑定到 Dropdownlist,但我在后端代码中找不到 Repeater("Repeater1")。请帮忙 !
<asp:GridView ID="gridViewAllotment" CssClass="table table-striped" runat="server"
AutoGenerateColumns="false" GridLines="None" BorderColor="#999999"
BorderStyle="Groove">
<Columns>
<asp:TemplateField HeaderText="Traffic Police">
<ItemTemplate>
<%# Eval("U_Name") %>
</ItemTemplate>
</asp:TemplateField>
<asp:TemplateField HeaderText="Traffic Junction">
<ItemTemplate>
<asp:Repeater ID="Repeater1" runat="server" OnItemDataBound = "Test">
<ItemTemplate>
<asp:DropDownList ID="ddl_TrafficJunction" runat="server" DataTextField="Junction">
</asp:DropDownList>
</itemTemplate>
</asp:Repeater>
</itemTemplate>
</asp:TemplateField>
</Columns>
</asp:GridView>
这是后端代码:
public 部分 class 交界处分配:System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
gridViewAllotment.DataSource = AllotmentLogic.SelectAllTrafficPolices();
gridViewAllotment.DataBind();
Repeater1.DataSource = RepSource();
Repeater1.DataBind();
}
public List<string> RepSource()
{
DataTable data = (DataTable)AllotmentLogic.SelectAllTrafficPolices();
var j = data.Rows.Count;
List<string> rep = new List<string>();
for (int i = 0; i < j ; i++)
{
rep.Add(i.ToString());
}
return rep;
}
public void FillDropdown(DropDownList ddl)
{
DataTable dt = AllotmentLogic.SelectTrafficJunction();
foreach (DataRow row in dt.Rows)
{
if (row["TrafficJunction_Name"].ToString() != null)
{
ddl.Items.Add(row["TrafficJunction_Name"].ToString());
}
}
}
在后端代码中它说 "Repeater1" 在当前上下文中不存在。
这段代码非常可疑。此代码表示 GridView
需要一个或多个 DropDownLists 每一行
<asp:TemplateField HeaderText="Traffic Junction">
<ItemTemplate>
<asp:Repeater ID="Repeater1" runat="server" OnItemDataBound = "Test">
<ItemTemplate>
<asp:DropDownList ID="ddl_TrafficJunction" runat="server"
DataTextField="Junction">
</asp:DropDownList>
</ItemTemplate>
</asp:Repeater>
</ItemTemplate>
</asp:TemplateField>
我认为这更符合您要执行的操作:
<asp:TemplateField HeaderText="Traffic Junction">
<ItemTemplate>
<asp:DropDownList ID="ddl_TrafficJunction" runat="server"
DataTextField="Junction">
</asp:DropDownList>
</ItemTemplate>
</asp:TemplateField>
然后在后面的代码中(对不起 VB - 但 C# 应该足够简单,可以转换)
Private Sub GridView1_RowDataBound(sender As Object, e As GridViewRowEventArgs) Handles GridView1.RowDataBound
If e.Row.RowType = DataControlRowType.DataRow Then
Dim ddl As DropDownList = e.Row.FindControl("ddl_TrafficJunction")
ddl.DataSource = CType(AllotmentLogic.SelectTrafficJunction(), DataTable)
ddl.DataBind()
End If
End Sub
这是我的 aspx 页面:我想将一列绑定到 Dropdownlist,但我在后端代码中找不到 Repeater("Repeater1")。请帮忙 !
<asp:GridView ID="gridViewAllotment" CssClass="table table-striped" runat="server"
AutoGenerateColumns="false" GridLines="None" BorderColor="#999999"
BorderStyle="Groove">
<Columns>
<asp:TemplateField HeaderText="Traffic Police">
<ItemTemplate>
<%# Eval("U_Name") %>
</ItemTemplate>
</asp:TemplateField>
<asp:TemplateField HeaderText="Traffic Junction">
<ItemTemplate>
<asp:Repeater ID="Repeater1" runat="server" OnItemDataBound = "Test">
<ItemTemplate>
<asp:DropDownList ID="ddl_TrafficJunction" runat="server" DataTextField="Junction">
</asp:DropDownList>
</itemTemplate>
</asp:Repeater>
</itemTemplate>
</asp:TemplateField>
</Columns>
</asp:GridView>
这是后端代码:
public 部分 class 交界处分配:System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
gridViewAllotment.DataSource = AllotmentLogic.SelectAllTrafficPolices();
gridViewAllotment.DataBind();
Repeater1.DataSource = RepSource();
Repeater1.DataBind();
}
public List<string> RepSource()
{
DataTable data = (DataTable)AllotmentLogic.SelectAllTrafficPolices();
var j = data.Rows.Count;
List<string> rep = new List<string>();
for (int i = 0; i < j ; i++)
{
rep.Add(i.ToString());
}
return rep;
}
public void FillDropdown(DropDownList ddl)
{
DataTable dt = AllotmentLogic.SelectTrafficJunction();
foreach (DataRow row in dt.Rows)
{
if (row["TrafficJunction_Name"].ToString() != null)
{
ddl.Items.Add(row["TrafficJunction_Name"].ToString());
}
}
}
在后端代码中它说 "Repeater1" 在当前上下文中不存在。
这段代码非常可疑。此代码表示 GridView
需要一个或多个 DropDownLists 每一行
<asp:TemplateField HeaderText="Traffic Junction">
<ItemTemplate>
<asp:Repeater ID="Repeater1" runat="server" OnItemDataBound = "Test">
<ItemTemplate>
<asp:DropDownList ID="ddl_TrafficJunction" runat="server"
DataTextField="Junction">
</asp:DropDownList>
</ItemTemplate>
</asp:Repeater>
</ItemTemplate>
</asp:TemplateField>
我认为这更符合您要执行的操作:
<asp:TemplateField HeaderText="Traffic Junction">
<ItemTemplate>
<asp:DropDownList ID="ddl_TrafficJunction" runat="server"
DataTextField="Junction">
</asp:DropDownList>
</ItemTemplate>
</asp:TemplateField>
然后在后面的代码中(对不起 VB - 但 C# 应该足够简单,可以转换)
Private Sub GridView1_RowDataBound(sender As Object, e As GridViewRowEventArgs) Handles GridView1.RowDataBound
If e.Row.RowType = DataControlRowType.DataRow Then
Dim ddl As DropDownList = e.Row.FindControl("ddl_TrafficJunction")
ddl.DataSource = CType(AllotmentLogic.SelectTrafficJunction(), DataTable)
ddl.DataBind()
End If
End Sub