窗体控件如下:
private void frmDataSetAdvance_Load(object sender, EventArgs e)
{
//sql语句
sql="select * from tblClass";
//根据sql语句创建DataAdapter对像 sda
sda = new SqlDataAdapter(sql, DBOpen.conn);
//填充数据集,表名为tblClass
sda.Fill(ds, "tblClass");
//绑定数据集ds中表tblClass到第一个列表框cboClassName
this.cboClassName.DataSource = ds.Tables["tblClass"];
//绑定cboClassName显示给用户的内容成员
this.cboClassName.DisplayMember = ds.Tables["tblClass"].Columns["ClassName"].ToString();
//绑定cboClassName各项值的成员
this.cboClassName.ValueMember = ds.Tables["tblClass"].Columns["ClassID"].ToString();
//将选择项的显示文件赋值给txtClassSelectedItem的Text
this.txtClassSelectedItem.Text = this.cboClassName.SelectedValue.ToString();
//调用方法显示cboGradeID的内容
FillSecondeComboBox();
//this.txtGradeSelectedItem.Text = this.cboGradeID.SelectedValue.ToString();
}
/// <summary>
/// 列表框cboClassName选择项改变事件
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void cboClassName_SelectedIndexChanged(object sender, EventArgs e)
{
//赋值给第一个文件框txtClassSelectedItem
this.txtClassSelectedItem.Text = this.cboClassName.SelectedValue.ToString();
FillSecondeComboBox();
//this.txtGradeSelectedItem.Text = this.cboGradeID.SelectedValue.ToString();
//当窗体加载时, 错误提示:未将对象引用设置到对象的实例 //解决问题
if (this.cboGradeID.Items.Count > 0) //****
{
this.txtGradeSelectedItem.Text = this.cboGradeID.SelectedValue.ToString();
}
}
/// <summary>
/// 根椐cboClassName列表框的选择项的变化动态填充新数据到数据集ds的表tblGrade中,然后与cboGradeID绑定
/// </summary>
private void FillSecondeComboBox()
{
sql = string.Format("select * from tblGrade where ClassID='{0}'",
this.cboClassName.SelectedValue.ToString());
sda = new SqlDataAdapter(sql, DBOpen.conn);
//清空数据集ds中的表tblGrade内容
if (ds.Tables.Count>1) //怎么样判断数据集ds中存在表tblGrade
{
ds.Tables["tblGrade"].Clear();
}
//填充内容到数据集ds表tblGrade中
sda.Fill(ds, "tblGrade");
//绑定数据集ds表tblGrade到cboGradeID列表框
this.cboGradeID.DataSource = ds.Tables["tblGrade"];
this.cboGradeID.DisplayMember = ds.Tables["tblGrade"].Columns["GradeId"].ToString();
this.cboGradeID.ValueMember = ds.Tables["tblGrade"].Columns["GradeId"].ToString();
}
/// <summary>
/// 选择项改变事件,动态改变下面文件框txtGradeSelectedItem的文本
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void cboGradeID_SelectedIndexChanged(object sender, EventArgs e) {
if (this.cboGradeID.Items.Count > 0)
{
//this.txtGradeSelectedItem.Text = this.cboGradeID.SelectedValue.ToString();
//当cboClassName选中项改变时, 错误提示:未将对象引用设置到对象的实例
//解决问题 //this.txtGradeSelectedItem.Text = this.cboGradeID.SelectedText;
//上面的问题解决,但它只显示第一项的文本(好像是//****位置的功劳),改变项后不显示内容 this.txtGradeSelectedItem.Text = "???";
}
else
{
this.txtGradeSelectedItem.Text = "没有数据!";
}
}上面是代码部分,其中标红的地方就是问题的所在了。
本人在北大青鸟学S1的课程,拜托各位高手帮帮忙看下,谢谢!!!!
private void frmDataSetAdvance_Load(object sender, EventArgs e)
{
//sql语句
sql="select * from tblClass";
//根据sql语句创建DataAdapter对像 sda
sda = new SqlDataAdapter(sql, DBOpen.conn);
//填充数据集,表名为tblClass
sda.Fill(ds, "tblClass");
//绑定数据集ds中表tblClass到第一个列表框cboClassName
this.cboClassName.DataSource = ds.Tables["tblClass"];
//绑定cboClassName显示给用户的内容成员
this.cboClassName.DisplayMember = ds.Tables["tblClass"].Columns["ClassName"].ToString();
//绑定cboClassName各项值的成员
this.cboClassName.ValueMember = ds.Tables["tblClass"].Columns["ClassID"].ToString();
//将选择项的显示文件赋值给txtClassSelectedItem的Text
this.txtClassSelectedItem.Text = this.cboClassName.SelectedValue.ToString();
//调用方法显示cboGradeID的内容
FillSecondeComboBox();
//this.txtGradeSelectedItem.Text = this.cboGradeID.SelectedValue.ToString();
}
/// <summary>
/// 列表框cboClassName选择项改变事件
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void cboClassName_SelectedIndexChanged(object sender, EventArgs e)
{
//赋值给第一个文件框txtClassSelectedItem
this.txtClassSelectedItem.Text = this.cboClassName.SelectedValue.ToString();
FillSecondeComboBox();
//this.txtGradeSelectedItem.Text = this.cboGradeID.SelectedValue.ToString();
//当窗体加载时, 错误提示:未将对象引用设置到对象的实例 //解决问题
if (this.cboGradeID.Items.Count > 0) //****
{
this.txtGradeSelectedItem.Text = this.cboGradeID.SelectedValue.ToString();
}
}
/// <summary>
/// 根椐cboClassName列表框的选择项的变化动态填充新数据到数据集ds的表tblGrade中,然后与cboGradeID绑定
/// </summary>
private void FillSecondeComboBox()
{
sql = string.Format("select * from tblGrade where ClassID='{0}'",
this.cboClassName.SelectedValue.ToString());
sda = new SqlDataAdapter(sql, DBOpen.conn);
//清空数据集ds中的表tblGrade内容
if (ds.Tables.Count>1) //怎么样判断数据集ds中存在表tblGrade
{
ds.Tables["tblGrade"].Clear();
}
//填充内容到数据集ds表tblGrade中
sda.Fill(ds, "tblGrade");
//绑定数据集ds表tblGrade到cboGradeID列表框
this.cboGradeID.DataSource = ds.Tables["tblGrade"];
this.cboGradeID.DisplayMember = ds.Tables["tblGrade"].Columns["GradeId"].ToString();
this.cboGradeID.ValueMember = ds.Tables["tblGrade"].Columns["GradeId"].ToString();
}
/// <summary>
/// 选择项改变事件,动态改变下面文件框txtGradeSelectedItem的文本
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void cboGradeID_SelectedIndexChanged(object sender, EventArgs e) {
if (this.cboGradeID.Items.Count > 0)
{
//this.txtGradeSelectedItem.Text = this.cboGradeID.SelectedValue.ToString();
//当cboClassName选中项改变时, 错误提示:未将对象引用设置到对象的实例
//解决问题 //this.txtGradeSelectedItem.Text = this.cboGradeID.SelectedText;
//上面的问题解决,但它只显示第一项的文本(好像是//****位置的功劳),改变项后不显示内容 this.txtGradeSelectedItem.Text = "???";
}
else
{
this.txtGradeSelectedItem.Text = "没有数据!";
}
}上面是代码部分,其中标红的地方就是问题的所在了。
本人在北大青鸟学S1的课程,拜托各位高手帮帮忙看下,谢谢!!!!
解决方案 »
- C# WinForm程序如何把数据按照规定大于设置也许的字数后分成两段存储到数据库
- C# 中,combox选择值,textbox自动显示相应的Combox数据
- C#引用类型作为参数传值的一些问题
- 删除Menu的问题,哪一题正确?
- 在C#中如何存储临时数据
- 流量控制问题
- 用户代码未处理 System.Exception
- 升级升级升级,我快烦死了,同一件事情做那么多遍,好累~~~~(散分)
- [急]嵌入到IE中的winForm为什么不能浏览
- 怪问题,Socket.Send发第三次就自动断开,再连,再发,又是第三次自动断开。是向本机80端口发(开了web服务)
- 用C#调用Word问题,在服务器本地可通过但客户端有问题
- 大量的sql语句查询效率问题
*****************************************************************************
欢迎使用CSDN论坛专用阅读器 : CSDN Reader(附全部源代码)
http://feiyun0112.cnblogs.com/
{
txtGradeSelectedItem.Text = cboGradeID.SelectedItem.ToString();
}
if (cboGradeID.SelectedItem != null)
{
txtGradeSelectedItem.Text = cboGradeID.SelectedItem.ToString();
}
else
{
txtGradeSelectedItem.Text = "";
}
this.cboGradeID.DisplayMember = ds.Tables["tblGrade"].Columns["GradeId"].ToString();
this.cboGradeID.ValueMember = ds.Tables["tblGrade"].Columns["GradeId"].ToString();
//把下面这行代码
this.txtGradeSelectedItem.Text = "???";
//替换为
DataRowView rowView = (DataRowView)cboGradeID.SelectedItem;
txtGradeSelectedItem.Text = rowView.Row["GradeName"].ToString(); //这个要根据你绑定的字段了,如果上面确实都是GradeId,那就换成GradeId吧
{
this.txtGradeSelectedItem.Text=this.cboGradeID.Items[cboGradeID.SelectedIndex].ToString();
}
但是问题还没有解决,第二个文件框txtGradeSelectedItem只显示第一项,
当改变cboGradeID的选项时显示内容为:“System.Data.DataRowView”。
根据3楼 flyjimi和5楼 root_,问题解决了
if (this.cboGradeID.SelectedItem != null)
{
DataRowView rowView = (DataRowView)cboGradeID.SelectedItem;
txtGradeSelectedItem.Text = rowView.Row["GradeID"].ToString();
}
else
{
txtGradeSelectedItem.Text = "没有选择项";
}
3楼和5楼同样都很重要,个人认为5楼是解决该问题的关键!问题虽然解决了,但是root_的做法由于没有学过,
有点不懂,还想请root_麻烦你解释一下,越详细越好,谢谢啦 !经后我会经常来这里的,再次感谢大家的热心帮忙!
有点不规范了
呵呵!