1/1页1 跳转到查看:745
发新话题 回复该主题

treeview绑定问题!!

treeview绑定问题!!

新建一张表:id        typename    typename1    typename2
                      1          asp.net            考试                图书
                      2              c#                考试                图书
                      3            化学              教材                图书
                      4              s5            联想手机            手机
                      ................................
                      9          p330            夏新                  手机

怎样用treeview三级数据绑定!比如(手机类包括联想和夏新,联想又包括几类。)

TOP

 

回复:treeview绑定问题!!

Treeview不能直接绑定DataSet,只能绑定XML数据流。
虽然可以把DataSet转换为XML数据流再绑定,不过可能会有性能损失。
我认为这种情况最好直接使用XML数据流比较方便,可以定义XML文档如下:

<?xml version="1.0" encoding="utf-8" ?>
<root name="目录名">
  <typename2 name="图书">
    <typename1 name="考试">
      <typename>asp.net</typename>
      <typename>c#</typename>
    </typename1>
    <typename1 name="教材">
      <typename>化学</typename>
    </typename1>
  </typename2>
  <typename2 name="手机">
    <typename1 name="联想手机">
      <typename>s5</typename>
    </typename1>
    <typename1 name="夏新">
      <typename>p330</typename>
    </typename1>
  </typename2>
</root>

然后就可以把它绑定到TreeView上:

        <asp:TreeView ID="TreeView1" runat="server" DataSourceID="XmlDataSource1">
            <DataBindings>
                <asp:TreeNodeBinding DataMember="root" Depth="0" TextField="name" />
                <asp:TreeNodeBinding DataMember="typename2" Depth="1" TextField="name" />
                <asp:TreeNodeBinding DataMember="typename1" Depth="2" TextField="name" />
                <asp:TreeNodeBinding DataMember="typename" Depth="3" TextField="#InnerText" />
            </DataBindings>
        </asp:TreeView>
        <asp:XmlDataSource ID="XmlDataSource1" runat="server" DataFile="~/XMLFile.xml"></asp:XmlDataSource>

这是我在VS2005做出来的效果:

 附件: 您所在的用户组无法下载或查看附件
最后编辑suresy 最后编辑于 2008-06-24 23:26:11
路漫漫其修远兮 吾将上下而求索

TOP

 

回复: treeview绑定问题!!



引用:
原帖由 suresy 于 2008-6-24 22:31:00 发表
Treeview不能直接绑定DataSet,只能绑定XML数据流。
虽然可以把DataSet转换为XML数据流再绑定,不过可能会有性能损失。
我认为这种情况最好直接使用XML数据流比较方便,可以定义XML文档如下:

<?xml version="1.0" encoding="utf-8" ?>
<root name="

看来你进步的很快啊,这个问题比我想的还要清楚
http://www.Aspx1.Com
请帮忙宣传Aspx1 , Aspx1是ASP.NET学习者的家园 , 适宜长期居住.

TOP

 

回复:treeview绑定问题!!

由于我的时间的关系我就不具体到你列举的数据库表中了,给你我的例子看看,是C#  绑定到Dataset中的Table 数据源,我的例子是Oracle数据库。
在Page_Load中调用InitRoot 方法。
InitRoot 方法为:
private void InitRoot(TreeView Nds, string sqlstr)
        {
            try
            {
                Nds.Nodes.Clear();
                DataView dvTree = new DataView();
                TreeNode tmpNd;
                //调用生成数据集的DS
                DbClass d = new DbClass();
                DataSet ds = d.CreateDataSet(sqlstr);
                //把ds的数据填充到dvTree中
                dvTree.Table = ds.Tables["Table"];
                foreach (DataRowView drvTree in dvTree)
                {
                    //创建要添加结点
                    tmpNd = new TreeNode();
                    tmpNd.Value = drvTree["tid"].ToString();
                    tmpNd.Text = drvTree["tname"].ToString();
                    //tmpNd.Target = "BoardTitle";
                    //给控件添加根结点
                    Nds.Nodes.Add(tmpNd);
                    //设置其自动检查是否有子结点
                    tmpNd.PopulateOnDemand = true;
                    tmpNd.SelectAction = TreeNodeSelectAction.Expand;
                }
            }
            catch (Exception ex)
            {
                throw new ApplicationException(ex.ToString());
            }
        }
其中的d.CreateDataSet(sqlstr)  是返回Dataset  具体如下实现:
public DataSet CreateDataSet(string sqlstr)
        {
            try
            {
                OracleConnection myConn = new OracleConnection(System.Configuration.ConfigurationManager.ConnectionStrings["strcon"].ConnectionString);
                myConn.Open();
                //clsConn myConn = new clsConn();
                OracleDataAdapter cd = new OracleDataAdapter();
                cd.SelectCommand = new OracleCommand(sqlstr, myConn);
                cd.SelectCommand.CommandType = CommandType.Text;
                DataSet dsTree = new DataSet();
                cd.Fill(dsTree, "Table");
                myConn.Close();
                return dsTree;
            }
            catch
            {
                Console.WriteLine("Exception in Main :");
                return null;
            }
        }
然后再在TreeView的TreeNodePopulate时间中调用AddEditTreeChild(e.Node);
具体方法如下:
private void AddEditTreeChild(TreeNode tnd)
        {
            try
            {
                DataView dvTree = new DataView();
                TreeNode tmpNd;
                //调用生成数据集的DS
                DbClass d = new DbClass();
                DataSet ds = d.CreateDataSet("select * from di_user_permissionView where userid='" + Session["userid"].ToString() + "'");
                //把ds的数据填充到dvTree中
                dvTree.Table = ds.Tables["Table"];
                //筛选出当前结点的父结点ID
                dvTree.RowFilter = "pid=" + tnd.Value.ToString() + "";
                foreach (DataRowView drvTree in dvTree)
                {
                    //创建要添加结点
                    tmpNd = new TreeNode();
                    tmpNd.Value = drvTree["tid"].ToString();
                    tmpNd.Text = drvTree["tname"].ToString();
                    //tmpNd.Target = "BoardTitle";
                    //添加到当前结点处
                    tnd.ChildNodes.Add(tmpNd);
                    //设置其自动搜索是否有子结点
                    tmpNd.PopulateOnDemand = true;
                }
                if (tnd.ChildNodes.Count != 0) tnd.SelectAction = TreeNodeSelectAction.Expand;
            }
            catch
            {
                //
            }
        }
这样就能实现TreeView的绑定 ,具体整个树结构是几级的 要看你数据库的设计了。
我这个应该是不用javascript 纯C#的表中TreeView的绑定了,你可以参考。

TOP

 

回复:treeview绑定问题!!

向你们学习啊!

TOP

 
1/1页1 跳转到
发表新主题 回复该主题