数据表结构:
大类 小类
A A1
A A2
B B1
B B2
B B3
C C1
C C2
D D1
要实现效果:
A
A1 A2
B
B1 B2 B3
C
C1 C2
D
D1
大类和小类都是变化的,查了类似帖子没有解决,用DataGrid或DataList,Repeater怎么实现呢?
大类 小类
A A1
A A2
B B1
B B2
B B3
C C1
C C2
D D1
要实现效果:
A
A1 A2
B
B1 B2 B3
C
C1 C2
D
D1
大类和小类都是变化的,查了类似帖子没有解决,用DataGrid或DataList,Repeater怎么实现呢?
例
A
A1 A2
A11 A12 A13 A21 A22 A23
........
B
................
....
<asp:Label id="Label1" runat="server">Label</asp:Label>
<asp:DataList id="DataList1" runat="server" RepeatDirection="Horizontal">
<ItemTemplate>
<%# DataBinder.Eval(Container.DataItem, "小类")%>
</ItemTemplate>
</asp:DataList>
*****************************************
public class WebUserControl1 : System.Web.UI.UserControl
{
protected System.Web.UI.WebControls.Label Label1;
protected System.Web.UI.WebControls.DataList DataList1; private void Page_Load(object sender, System.EventArgs e)
{} public void BindData(string parentType,DataRow[] childTypes)
{
this.Label1.Text = parentType;
if(childTypes.Length>0)
{
DataTable dt = childTypes[0].Table.Clone();
foreach(DataRow row in childTypes)
{
dt.Rows.Add(row.ItemArray);
}
this.DataList1.DataSource = dt;
this.DataList1.DataBind();
}
}
...
AutoGenerateColumns="False">
<Columns>
<asp:BoundColumn Visible="False" DataField="大类"></asp:BoundColumn>
<asp:TemplateColumn>
<ItemTemplate>
<uc1:WebUserControl1 id="WebUserControl11" runat="server"></uc1:WebUserControl1>
</ItemTemplate>
</asp:TemplateColumn>
</Columns>
</asp:DataGrid>
***********************
public class _8218347 : System.Web.UI.Page
{
protected System.Web.UI.WebControls.DataGrid DataGrid1;
DataSet ds = null;
private void Page_Load(object sender, System.EventArgs e)
{
// 在此处放置用户代码以初始化页面
if(!IsPostBack)
{
CreateTestData();
this.DataGrid1.DataSource = ds.Tables[0];
this.DataGrid1.DataBind();
}
} private void CreateTestData()
{
ds = new DataSet();
DataTable dt1 = new DataTable();
dt1.Columns.Add("大类");
dt1.Rows.Add(new object[]{"A"});
dt1.Rows.Add(new object[]{"B"});
dt1.Rows.Add(new object[]{"C"});
dt1.Rows.Add(new object[]{"D"});
DataTable dt2 = new DataTable();
dt2.Columns.Add("大类");
dt2.Columns.Add("小类");
dt2.Rows.Add(new object[]{"A","A1"});
dt2.Rows.Add(new object[]{"A","A2"});
dt2.Rows.Add(new object[]{"B","B1"});
dt2.Rows.Add(new object[]{"B","B2"});
dt2.Rows.Add(new object[]{"B","B3"});
dt2.Rows.Add(new object[]{"C","C1"});
dt2.Rows.Add(new object[]{"C","C2"});
dt2.Rows.Add(new object[]{"D","D1"});
ds.Tables.Add(dt1);
ds.Tables.Add(dt2);
ds.AcceptChanges();
}
private void DataGrid1_ItemDataBound(object sender, System.Web.UI.WebControls.DataGridItemEventArgs e)
{
if(e.Item.ItemIndex>-1)
{
string parentType = e.Item.Cells[0].Text;
WebUserControl1 tmp = e.Item.Cells[1].Controls[1] as WebUserControl1;
tmp.BindData(parentType,ds.Tables[1].Select("[大类]='"+parentType+"'"));
}
}#region Web 窗体设计器生成的代码
override protected void OnInit(EventArgs e)
{
//
// CODEGEN: 该调用是 ASP.NET Web 窗体设计器所必需的。
//
InitializeComponent();
base.OnInit(e);
}
/// <summary>
/// 设计器支持所需的方法 - 不要使用代码编辑器修改
/// 此方法的内容。
/// </summary>
private void InitializeComponent()
{
this.DataGrid1.ItemDataBound += new System.Web.UI.WebControls.DataGridItemEventHandler(this.DataGrid1_ItemDataBound);
this.Load += new System.EventHandler(this.Page_Load); }
#endregion }
public void ColumnManageInit(ref Microsoft.Web.UI.WebControls.TreeView TreeCtrl)
{
SystemColumn.SystemColumn mSystemColumnServices = new SystemColumn.SystemColumn(); StringBuilder strJavascript;
Microsoft.Web.UI.WebControls.TreeNode NodeItem = null; TreeCtrl.Nodes.Clear();
TreeCtrl.Attributes.Add("onclick", "javascript: if(this.clickedNodeIndex != null && form1.EditState.value=='Browse') {this.selectedNodeIndex=this.clickedNodeIndex; NodeItem_Click();return true;}"); //创建根节点
DataSet PRootDSet = new DataSet();
mSystemColumnServices.System_Columen_Ex_FilterAll(ref PRootDSet); PRootDSet.Tables[0].TableName = "Root"; DataTable PDataTable = PRootDSet.Tables[0].Copy();
PDataTable.TableName = "Nodes";
PRootDSet.Tables.Add(PDataTable); //**设置权限模块主子关系
DataColumn parentCol;
DataColumn childCol;
parentCol = PRootDSet.Tables[0].Columns["PNodeCode"];
childCol = PRootDSet.Tables[1].Columns["PNodeCodeParentCode"];
DataRelation relNum; relNum = new DataRelation("SD", parentCol, childCol);
PRootDSet.Relations.Add(relNum);
foreach (DataRow PDRow in PRootDSet.Tables["Root"].Rows)
{
if (PDRow["PNodeCode"].ToString().Length == 2)
{
strJavascript = new StringBuilder("");
for (int j = 0; j < PRootDSet.Tables["Root"].Columns.Count; j++) strJavascript.Append(PDRow[j].ToString() + "\t"); NodeItem = new Microsoft.Web.UI.WebControls.TreeNode();
NodeItem.Text = PDRow["PNodeName"].ToString();
NodeItem.ID = PDRow["PNodeCode"].ToString();
NodeItem.NodeData = strJavascript.ToString();
NodeItem.NavigateUrl = "#";
TreeCtrl.Nodes.Add(NodeItem); foreach (DataRow CDRow in PDRow.GetChildRows(relNum))
{
//**搜寻主表相对行
DataRow[] TRootRow = PRootDSet.Tables["Root"].Select("PNODECODE='" + CDRow["PNodeCode"].ToString() + "'"); DicAreaManageInitChild(ref NodeItem, PRootDSet, TRootRow[0], relNum);
}
}
} PRootDSet.Dispose(); } private void DicAreaManageInitChild(ref Microsoft.Web.UI.WebControls.TreeNode PNodeItem, DataSet PRootDSet, DataRow PDRow, DataRelation relNum)
{
Microsoft.Web.UI.WebControls.TreeNode NodeItem = null; //DataRow NChildRow=null; StringBuilder strJavascript = new StringBuilder("");
for (int j = 0; j < PRootDSet.Tables["Root"].Columns.Count; j++) strJavascript.Append(PDRow[j].ToString() + "\t"); NodeItem = new Microsoft.Web.UI.WebControls.TreeNode();
NodeItem.Text = PDRow["PNodeName"].ToString();
NodeItem.ID = PDRow["PNodeCode"].ToString();
NodeItem.NodeData = strJavascript.ToString();
NodeItem.NavigateUrl = "#"; PNodeItem.Nodes.Add(NodeItem); foreach (DataRow CDRow in PDRow.GetChildRows(relNum))
{
//**搜寻主表相对行
DataRow[] TRootRow = PRootDSet.Tables["Root"].Select("PNODECODE='" + CDRow["PNodeCode"].ToString() + "'"); DicAreaManageInitChild(ref NodeItem, PRootDSet, TRootRow[0], relNum);
}
}