表,使用 asp.net Web 表单首先显示母公司的所有公司列表和母公司下的子公司,并带有用于选择公司的复选框列表。在第一个SQL SP中,我从第一个数据表中获取母公司列表,并从第一个数据表中获取此公司ID(例如:1,2,3)以循环获取第二个数据表中的子公司列表
我尝试将嵌套中继器用于 2 个数据表,但不确定如何实现这一点以及哪个是最佳控件
protected void Page_Load(object sender, EventArgs e)
{
if (!Page.IsPostBack)
{
DataTable dtx = Getparentfirm();
DataTable dso = GetSuboffice(dtx);
R1.DataSource = dtx;
R1.DataBind();
R2.DataSource = dso;
R2.DataBind();
}
}
private DataTable Getparentfirm()
{
using (SqlConnection conn = new SqlConnection("Data Source=.;Initial Catalog=test;Integrated Security=True"))
{
SqlDataAdapter sda = new SqlDataAdapter("select * from company where parentcompany is NULL", conn);
DataTable dt = new DataTable();
sda.Fill(dt);
return dt;
}
}
private DataTable GetSuboffice(DataTable dt)
{
DataTable dtz = new DataTable();
using (SqlConnection conn = new SqlConnection("Data Source=.;Initial Catalog=test;Integrated Security=True"))
foreach (DataRow row in dt.Rows)
{
SqlDataAdapter sda = new SqlDataAdapter("select id, fname , lname from customer where cid =" + row["cid"].ToString(), conn);
sda.Fill(dtz);
return dtz;
}
return null;
}
<asp:Repeater ID="R1" runat="server">
<ItemTemplate>
name:<%# Eval("companyname") %></td>
</ItemTemplate>
<asp:Repeater ID="R2" runat="server">
<ItemTemplate>
ID :<%# Eval("companyid") %>
Name:<%# Eval("companyname") %>
</ItemTemplate>
</asp:Repeater>
</asp:Repeater>
如何将 2 个数据表绑定到嵌套转发器以获得预期的输出。任何帮助都会很棒
预期输出
parentcompanyid 1 parent company one checkbox
sub office 1.1 sub office one checkbox
sub office 1.2 sub office two checkbox
parent comapnyid 2 parent company two checkbox
sub office 2.1 sub office one checkbox
sub office 2.2 sub office two checkbox
当您使用中继器时,请确保您的所有内容都在模板节点中,例如<ItemTemplate>
- 甚至是嵌套的中继器。
标记正确后,可以将OnItemDataBound
事件附加到父转发器,然后使用该项的 ID 获取数据以绑定嵌套转发器,然后仅绑定它。例如,像这样:
.ASPX
<asp:Repeater ID="R1" runat="server" OnItemDataBound="R1_ItemDataBound">
<ItemTemplate>
<asp:HiddenField runat="server" ID="CompanyId" value='<%# Eval("id") %>' />
<div>name:<%# Eval("companyname") %></div>
<asp:Repeater ID="R2" runat="server">
<ItemTemplate>
ID :<%# Eval("companyid") %><br>
Name:<%# Eval("companyname") %>
</ItemTemplate>
</asp:Repeater>
</ItemTemplate>
</asp:Repeater>
.CS
protected void Page_Load(object sender, EventArgs e)
{
if (!Page.IsPostBack)
{
DataTable dtx = Getparentfirm();
R1.DataSource = dtx;
R1.DataBind();
}
}
protected void R1_ItemDataBound(Object Sender, RepeaterItemEventArgs e) {
// Get companyId from hidden field
// or you could get it from e.Item.DataItem which should have the data for this row of data
var CompanyID = (HiddenField)e.Item.FindControl("CompanyId");
var id = Convert.ToInt32(CompanyID.Value);
var R2 = (Repeater)e.Item.FindControl("R2");
var dso = GetData(id); // Get sub companies based on this company id
R2.DataSource = dso;
R2.DataBind();
}
类似的东西