下拉框怎样绑定树形结构数据呢?表数据:id name parentid
---------------------
-1 中国 0
-2 北京 -1
-3 广东 -1
-4 美国 0
-5 潮州 -3
-6 汕头 -3
-7 夏威夷 -4想要实现这样的效果:
中国
北京
广东
潮州
汕头
美国
夏威夷请各位高手相助!
---------------------
-1 中国 0
-2 北京 -1
-3 广东 -1
-4 美国 0
-5 潮州 -3
-6 汕头 -3
-7 夏威夷 -4想要实现这样的效果:
中国
北京
广东
潮州
汕头
美国
夏威夷请各位高手相助!
解决方案 »
- aspnetpager控件 如何设置 ImagePath属性
- 为何不能像导出Excel,Word等方式导出一个文件夹?
- EnableViewState,Page=false,TextBox=true,可以么?
- 各位大侠帮帮小弟
- 如何在CSS中写虚拟目录下的图片路径?
- 难于上青天??? 进者有分,不够再加。
- 我在类的构造函数里面使用 Request.ServerVariables["REMOTE_USER"] 会报错!
- asp.net是调用组件的几种方式
- StringBuilder需要using什么NAMESPACE?
- DataGrid中怎样格式化显示的问题
- 大家帮忙看一下这句话错哪了,谢谢!
- Repeater的Eval标签问题
1.函数
#Region "下拉框树形绑定"
Private Function DDLBind(ByVal ddl As DropDownList, ByVal dt As DataTable)
Dim fatherid As String
If dt.Rows.Count = 0 Then Exit Function
Dim i As Integer = dt.Rows.Count - 1
Me.TextBox1.Text = Me.TextBox1.Text + 1
Dim n As Integer = Me.TextBox1.Text
Dim j As Integer
While i + 1 > 0
If IsDBNull(dt.Rows(i).Item("DC_PARENT_ID")) Then
fatherid = ""
Else
fatherid = dt.Rows(i).Item("DC_PARENT_ID")
End If Dim strPading As String = "" If ddl.Items(n).Value = fatherid Then
For j = 0 To n
strPading += " "
Next Dim rslist As New ListItem
rslist.Text = strPading & "├" & dt.Rows(i).Item("DC_NAME")
rslist.Value = dt.Rows(i).Item("DC_ID")
ddl.Items.Add(rslist) dt.Rows(i).Delete()
dt.AcceptChanges() DDLBind(ddl, dt) i = dt.Rows.Count
End If
i = i - 1
End While
End Function
#End Region
2.应用
1)在页面放置一textbox控件,id=”textbox1”,text=-1
2)直接调用函数随便C#的,但很简单,自己搞一下吧~~~
1.首先建立一个函数
CREATE OR REPLACE FUNCTION FC_GET_BLANK(CURRENT_ID IN NUMBER) RETURN VARCHAR2 IS
V_RETURN_BLANK VARCHAR2(20);
V_PARENT_ID NUMBER;
BEGIN
SELECT PARENTID INTO V_PARENT_ID FROM TBL WHERE ID = CURRENT_ID;
WHILE V_PARENT_ID != 0 LOOP
V_RETURN_BLANK := ' ' || V_RETURN_BLANK;
SELECT PARENTID INTO V_PARENT_ID FROM TBL WHERE ID = V_PARENT_ID;
END LOOP; RETURN V_RETURN_BLANK;
END FC_GET_BLANK;
2.SQL语句
SELECT ID, FC_GET_BLANK(ID) || NAME AS NAME, PARENTID FROM TBL
用SQL语句很难整理出你需要的顺序在程序里面使用 DataTable.Select('PARENTID=' + ID) 来递归实现应该更容易
SELECT ID, NAME, PARENTID FROM TBL
2、C#代码
private void BindDropDownList()
{
DataTable dtSite; /* Get data here
* dtSite = ...
* */ DataRow[] dr = dtSite.Select("PARENTID=0");
for (int i=0; i<dr.Length; i++)
{
//ddlSite is your DropDownList control
ddlSite.Items.Add(new ListItem(dr["NAME"].ToString(), dr["ID"].ToString())); this.BindData(ddlSite, dtSite, dr["PARENTID"].ToString());
}
} private void BindData(DropDownList ddlSite, DataTable dt, string parentID)
{
DataRow[] dr = dtSite.Select("PARENTID=" + parentID.ToString());
for (int i=0; i<dr.Length; i++)
{
DropDownList ddlSite = new DropDownList();
//ddlSite is your DropDownList control
ddlSite.Items.Add(new ListItem(dr["NAME"].ToString(), dr["ID"].ToString())); this.BindData(ddlSite, dtSite, dr["PARENTID"].ToString());
}
}
{
DataTable dtSite; /* Get data here
* dtSite = ...
* */ DataRow[] dr = dtSite.Select("PARENTID=0");
for (int i=0; i<dr.Length; i++)
{
//ddlSite is your DropDownList control
ddlSite.Items.Add(new ListItem(dr["NAME"].ToString(), dr["ID"].ToString())); this.BindData(ddlSite, dtSite, dr["PARENTID"].ToString(), " ");
}
}private void BindData(DropDownList ddlSite, DataTable dt, string parentID, string blank)
{
DataRow[] dr = dtSite.Select("PARENTID=" + parentID.ToString());
for (int i=0; i<dr.Length; i++)
{
DropDownList ddlSite = new DropDownList();
//ddlSite is your DropDownList control
ddlSite.Items.Add(new ListItem(dr["NAME"].ToString(), dr["ID"].ToString())); this.BindData(ddlSite, dtSite, dr["PARENTID"].ToString(), blank + " ");
}
}
{
DataTable dtSite; /* Get data here
* dtSite = ...
* */ DataRow[] dr = dtSite.Select("PARENTID=0");
for (int i=0; i<dr.Length; i++)
{
//ddlSite is your DropDownList control
ddlSite.Items.Add(new ListItem(dr["NAME"].ToString(), dr["ID"].ToString())); this.BindData(ddlSite, dtSite, dr["PARENTID"].ToString(), " ");
}
}private void BindData(DropDownList ddlSite, DataTable dt, string parentID, string blank)
{
DataRow[] dr = dtSite.Select("PARENTID=" + parentID.ToString());
for (int i=0; i<dr.Length; i++)
{
DropDownList ddlSite = new DropDownList();
//ddlSite is your DropDownList control
ddlSite.Items.Add(new ListItem(blank + dr["NAME"].ToString(), dr["ID"].ToString())); this.BindData(ddlSite, dtSite, dr["PARENTID"].ToString(), blank + " ");
}
}
dtResult = GetDropItems(dtData, dtResult, strParentID,""); private DataTable GetDropItems(DataTable dt,DataTable dtResult, string strParentID,string addStr)
{
string strFilter = null; if (strParentID != null && strParentID.Length > 0)
strFilter = "parent_id = '{0}'";
else
strFilter = "parent_id is null or parent_id = ''";
strFilter = string.Format(strFilter,strParentID); DataRow[] drs = dt.Select(strFilter);
foreach (DataRow dr in drs)
{
DataRow drNew = dtResult.NewRow();
for (int i = 0; i < dr.Table.Columns.Count; i++)
{
drNew[i] = dr[i];
}
drNew["Name"] = addStr + drNew["Name"];
dtResult.Rows.Add(drNew);
GetDropItems(dt, dtResult, dr["id"].ToString(),addStr + " ");
} return dtResult;
}