程序写到这里就写不下去了,请大家帮忙!
这是一个母子表之间浏览的问题:
二个listBox,点击左边listBox的项,右边listBox显示相应子表的内容。
母表:tbParent
============
字段:
parentID int identity
name nchar(4)
子表:tbChild
============
字段:
childID int identity
parentID int
childName nchar(4)
c#:
private SqlConnection myConn;
private SqlCommand cmdParent;
private SqlCommand cmdChild;
private SqlDataAdapter daParent;
private SqlDataAdapter daChild;
private DataSet myDataSet;
private SqlCommandBuilder cbParent;
private SqlCommandBuilder cbChild;
private DataRelation rel;
private DataColumn colParent;
private DataColumn colChild;
private System.Windows.Forms.ListBox lbParent;
private System.Windows.Forms.ListBox lbChild;
//初始化
myConn = new SqlConnection("server=namhyuk;database=simple;uid=sa;pwd=password");
myConn.Open();
cmdParent = new SqlCommand("select * from tbParent", myConn);
cmdChild = new SqlCommand("select * from tbChild", myConn);
daParent = new SqlDataAdapter(cmdParent);
daChild = new SqlDataAdapter(cmdChild);
cbParent = new SqlCommandBuilder(daParent);
cbChild = new SqlCommandBuilder(daChild);
myDataSet = new DataSet();
daParent.Fill(myDataSet, "tbParent");
daChild.Fill(myDataSet, "tbChild");
myDataSet.Tables["tbParent"].PrimaryKey = new DataColumn[] { colParent };
myDataSet.Tables["tbChild"].PrimaryKey = new DataColumn[] { myDataSet.Tables["tbChild"].Columns["childID"] };
colParent.AutoIncrement = true;
colParent.AutoIncrementSeed = 0;
colParent.AutoIncrementStep = -1;
DataColumn c = myDataSet.Tables["tbChild"].Columns["childID"];
c.AutoIncrement = true;
c.AutoIncrementSeed = 0;
c.AutoIncrementStep = -1;
colParent = myDataSet.Tables["tbParent"].Columns["parentID"];
colChild = myDataSet.Tables["tbChild"].Columns["parentID"];
rel = new DataRelation("RelName",colParent, colChild);
myDataSet.Relations.Add(rel);
dvParent = new DataView(myDataSet.Tables["tbParent"]);
dvParent.Sort = "name";
lbParent.DataSource = dvParent;
lbParent.DisplayMember = "name";
lbParent.ValueMember = "parentID";
................
如果想实现左边listBox显示tbParent的name字段,当点击相应项时右边listBox里显示子表tbChild的childName字段内容,这时应该怎样进行控件的数据绑定,还是得用别的什么方法实现?
问题点数:0、回复次数:4Top
1 楼saucer(思归)回复于 2002-12-01 12:03:59 得分 0
something like
lbChild.DataSource = ((DataRowView)lbParent.SelectedItem).Row.GetChildRows("RelName");
lbChild.DisplayMember = "childName";Top
2 楼Elsa_Fent(宪兵队)回复于 2002-12-01 12:18:32 得分 0
同上Top
3 楼nanhe0065(静中念虑澄澈,见心之本体)回复于 2002-12-01 12:52:15 得分 0
不行。
lbParent_SelectedIndexChanged事件处理代码中
lbChild.Items.Clear();
foreach(DataRow r in ((DataRowView)lbParent.SelectedItem).Row.GetChildRows("RelName"))
lbChild.Items.Add(r["childName"]);
这样子倒是可以正确显示,不过这样子就不是控件数据绑定了。
GetChildRows返回的是DataRow的数组吧?Top
4 楼nanhe0065(静中念虑澄澈,见心之本体)回复于 2002-12-01 13:20:13 得分 0
或者在lbParent_SelectedIndexChanged事件处理代码中
lbChild.DataSource = ((DataRowView)lbParent.SelectedItem).CreateChildView("RelName");
lbChild.DisplayMember = "childName";
lbChild.ValueMember = "childID";
也可以正确显示, 不过有没有更好的方案?也就是像通常的数据绑定那样,不用在控件的事件处理代码中增加这样东东?Top




