在网上找了一个TREEVIEW读取数据库源码,但是ID是INT类型,我的数据库ID是字符型,怎么改高分?
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.Data.SqlClient;
namespace JMOA
{
public partial class dmclass : Form
{
SqlConnection conn = new SqlConnection("server=.;uid=sa;pwd=12345;database=JMOA");
SqlDataAdapter dtd;
DataSet ds;
DataView dv;//表示用于排序、筛选、搜索、编辑和导航的System.Data.DataTable+的可绑定数据的自定义视图
public dmclass()
{
InitializeComponent();
}
private void GetData(int pid, TreeNode pnode)
{
dv = ds.Tables[0].DefaultView;//获取可能包括筛选视图或游标位置的表的自定义视图
dv.RowFilter = "pid=" + pid;
int dvC = dv.Count;
if (pnode == null)
{
int i = 0;
while (i < dvC)
{
dv = ds.Tables[0].DefaultView;
dv.RowFilter = "pid=" + pid;
TreeNode node = new TreeNode();
node.Text = dv[i]["name"].ToString();
node.Tag = int.Parse(dv[i]["id"].ToString());
this.treeView1.Nodes.Add(node);
GetData((int)node.Tag, node);
i++;
}
}
else
{
int i = 0;
while (i < dvC)
{
dv = ds.Tables[0].DefaultView;
dv.RowFilter = "pid=" + pid;
TreeNode node = new TreeNode();
node.Text = dv[i]["name"].ToString();
node.Tag = int.Parse(dv[i]["id"].ToString());
pnode.Nodes.Add(node);
GetData(int.Parse(dv[i]["id"].ToString()), node);
i++;
}
}
}
private void dmclass_Load(object sender, EventArgs e)
{
dtd = new SqlDataAdapter("select * from [class] order by id", conn);
ds = new DataSet();
dtd.Fill(ds, "class");
GetData(0, null);
}
private void dmclass_FormClosing(object sender, FormClosingEventArgs e)
{
fmain.f1 = null;
}
}
}
数据库类型是这样的
id pid name
A 0 自制品
B 0 代工品
Y 0 外购材料
F 0 辅助材料
D 0 低值易耗品
G 0 固定资产
01 A 挖斗
02 A 铲斗
01 B 挖斗
02 B 铲斗
01 Y 钢板
02 Y 扁钢/方钢
01 D 劳保用品
02 D 五金件
01 G 房屋、建筑物
02 G 机器设备
01 F 气体
02 F 焊材
也就是说我的ID和PID都会有字符和数字出现,怎么改呢,大侠帮忙了~~~100份速求
[解决办法]
//注意事项
//1.RowFilter查询,如果是字符串许加单引号
//2. node.Tag = dv[i]["id"].ToString();
/// <summary>
/// 绑定TreeView
/// </summary>
/// <param name="pid">父节点ID</param>
/// <param name="pnode">当前父节点</param>
private void GetData(string pid, TreeNode pnode)
{
dv = ds.Tables[0].DefaultView;//获取可能包括筛选视图或游标位置的表的自定义视图
dv.RowFilter = "pid='" + pid+"'";//根据父节点设定筛选条件
int dvC = dv.Count;//查询总数
if (pnode == null)//默认为空时
{
int i = 0;
while (i < dvC)
{
dv = ds.Tables[0].DefaultView;
dv.RowFilter = "pid='" + pid+"'";
TreeNode node = new TreeNode();
node.Text = dv[i]["name"].ToString();//节点显示值绑定
node.Tag = dv[i]["id"].ToString();//设定标识属性值
this.treeView1.Nodes.Add(node);//添加节点
GetData(node.Tag.ToString(), node);//递归子节点
i++;
}
}
else
{
int i = 0;
while (i < dvC)
{
dv = ds.Tables[0].DefaultView;
dv.RowFilter = "pid='" + pid+"'";
TreeNode node = new TreeNode();
node.Text = dv[i]["name"].ToString();
node.Tag = dv[i]["id"].ToString();
pnode.Nodes.Add(node);
GetData(dv[i]["id"].ToString(), node);
i++;
}
}
}
[解决办法]
SqlConnection conn = new SqlConnection("server=.;uid=sa;pwd=12345;database=JMOA");
SqlDataAdapter dtd;
DataSet ds;
//链接数据库的语句,还有定义填充对象;
private void dmclass_Load(object sender, EventArgs e)
{
dtd = new SqlDataAdapter("select * from [class] order by id", conn);
ds = new DataSet();
dtd.Fill(ds, "class");
GetData(0, null);
}//加载的时候链接数据库,填充数据
private void dmclass_FormClosing(object sender, FormClosingEventArgs e)
{
fmain.f1 = null;
}
这个是窗体关闭事件 把fmain里面的fl属性变为空,当然没有看到你的全部代码,你自己看看!
private void GetData(int pid, TreeNode pnode)
{
dv = ds.Tables[0].DefaultView;//获取可能包括筛选视图或游标位置的表的自定义视图
dv.RowFilter = "pid=" + pid;后缀为pid后缀;
int dvC = dv.Count;统计个数
if (pnode == null)
{
int i = 0;
while (i < dvC)
{
dv = ds.Tables[0].DefaultView;
dv.RowFilter = "pid=" + pid;
TreeNode node = new TreeNode();
node.Text = dv[i]["name"].ToString();
node.Tag = int.Parse(dv[i]["id"].ToString());
this.treeView1.Nodes.Add(node);
GetData((int)node.Tag, node);
i++;
}
}
绑定treeview的数据;贴出来的代码实在太少了,能分析的有限!
else
{
int i = 0;
while (i < dvC)
{
dv = ds.Tables[0].DefaultView;
dv.RowFilter = "pid=" + pid;
TreeNode node = new TreeNode();
node.Text = dv[i]["name"].ToString();
node.Tag = int.Parse(dv[i]["id"].ToString());
pnode.Nodes.Add(node);
GetData(int.Parse(dv[i]["id"].ToString()), node);
i++;
}
}