c# comboBox控件绑定表字段问题。如何同时绑定多个comboBox呢,使其下拉列表的内容都是一样的 见详细补充

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了c# comboBox控件绑定表字段问题。如何同时绑定多个comboBox呢,使其下拉列表的内容都是一样的 见详细补充相关的知识,希望对你有一定的参考价值。

我定义了多个comboBox,但下面的代码只能绑定一个comboBox。要是一个一个绑定代码太多了。能不能同时绑定多个comboBox呢,使其下拉列表的内容都是一样的。

Maticsoft.BLL.T_Banci banci = new Maticsoft.BLL.T_Banci();
DataSet ds = banci.GetList("");
comboBox1.DataSource=ds.Tables[0].DefaultView;
comboBox1.DisplayMember = "Type";
comboBox1.ValueMember = "Type";
是c# winform程序。

首先定义一个公共的方法
public void BindComBox(ComboBox comBox,DataSet ds)

comBox.DataSource=ds.Tables[0].DefaultView;
comBox.DisplayMember = "Type";
comBox.ValueMember = "Type";

然后在页面上调用
Page_Load()

Maticsoft.BLL.T_Banci banci = new Maticsoft.BLL.T_Banci();
DataSet ds = banci.GetList("");
BindComBox(comBox1,ds);
BindComBox(comBox2,ds);
BindComBox(comBox3,ds);
BindComBox(comBox4,ds);
BindComBox(comBox5,ds);
BindComBox(comBox6,ds);..................................

追问

哥们 你这种方法 牵一发而动全身 ,改变任何一个comboBox的值 其余的都会改变。有没有什么改进方法呢?

追答

1.定义方法
void BindComBox(DataSet ds, ComboBox cmb)

cmb.DisplayMember = "Type";
cmb.ValueMember = "Type";

foreach (DataRow row in ds.Tables[0].Rows)

cmb.Items.Add(row);


2.
Maticsoft.BLL.T_Banci banci = new Maticsoft.BLL.T_Banci();
DataSet ds = banci.GetList("");
BindComBox(ds, comboBox1);
BindComBox(ds, comboBox2);
BindComBox(ds, comboBox3);
BindComBox(ds, comboBox4);

追问

现在每个comboBox里的内容就是System.Data.DataRow。

追答

这样你还不知道就算了吧 。。
建立一个类:
class MyType

public MyType(string _type1, string _type)

type = _type;
type1 = _type1;

private string type;

public string Type

get return type;
set type = value;

private string type1;

public string Type1

get return type1;
set type1 = value;



然后方法这样写:
void BindComBox(DataSet ds, ComboBox cmb)

cmb.DisplayMember = "Type";
cmb.ValueMember = "Type1";

foreach (DataRow item in ds.Tables[0].Rows)

cmb.Items.Add(new MyType(item["Type"].ToString(), item["Type1"].ToString()));

参考技术A 两种写法,一:每个都要写,例如:
comboBox1.DataSource=ds.Tables[0].DefaultView;
comboBox1.DisplayMember = "Type";
comboBox1.ValueMember = "Type";
comboBox2.DataSource=ds.Tables[0].DefaultView;
comboBox2.DisplayMember = "Type";
comboBox2.ValueMember = "Type";
comboBox3.DataSource=ds.Tables[0].DefaultView;
comboBox3.DisplayMember = "Type";
comboBox3.ValueMember = "Type";
第二种方法是,循环窗体的控件,如果控件类型是combobox,就绑定,例如:
foreach(Control com in this.Controls)

if(com.controlType.toString()=="System.windows.form.ComboBox")
com.DataSource=ds.Tables[0].DefaultView;
com.DisplayMember = "Type";
com.ValueMember = "Type";



以上代码只是我手写的,你看着写吧追问

if(com.controlType.toString()=="System.windows.form.ComboBox")
这句不对 没有controlType这个属性

追答

那就是我记错了,其他属性,反正就是***Type,获取控件的类型。

追问

没有什么***Type

追答

GetType()方法,
if (com.GetType().ToString() == "System.Windows.Forms.ComboBox")

com.DataSource=ds.Tables[0].DefaultView;
com.DisplayMember = "Type";
com.ValueMember = "Type";

追问

com.DataSource=ds.Tables[0].DefaultView;
com.DataSource= "Type";
com.ValueMember = "Type";

哥们 这里 DataSource DataSource ValueMember 都报错呢》。。。

追答

变通一下嘛,com是Control类型,转换成ComboBox类型应该就行了呗。
((ComboBox)com).DataSource=ds.Tables[0].DefaultView;

参考技术B 直接遍历整个 控件集,在控件集中找到 ComboBox的实例
然后给每个ComboBox绑定上相同的数据源。
foreach (Control control in Controls)
if (control is ComboBox)
ComboBox comboBox = (ComboBox)control;
comboBox.DataSource = ds.Tables[0].DefaultView;
//其他操作

追问

哥们 你这种方法 牵一发而动全身 ,改变任何一个comboBox的值 其余的都会改变。

参考技术C comboBox1.DataSource=ds.Tables[0].DefaultView;
comboBox1.DisplayMember = "Type";
comboBox1.ValueMember = "Type";
comboBox2.DataSource=ds.Tables[0].DefaultView;
comboBox2.DisplayMember = "Type";
comboBox2.ValueMember = "Type";
comboBox3.DataSource=ds.Tables[0].DefaultView;
comboBox3.DisplayMember = "Type";
comboBox3.ValueMember = "Type";
comboBox4.DataSource=ds.Tables[0].DefaultView;
comboBox4.DisplayMember = "Type";
comboBox4.ValueMember = "Type";
comboBox5.DataSource=ds.Tables[0].DefaultView;
comboBox5.DisplayMember = "Type";
comboBox5.ValueMember = "Type";
comboBox6.DataSource=ds.Tables[0].DefaultView;
comboBox6.DisplayMember = "Type";
comboBox6.ValueMember = "Type";
comboBox7.DataSource=ds.Tables[0].DefaultView;
comboBox7.DisplayMember = "Type";
comboBox7.ValueMember = "Type";追问

哥们 你这个少了个 DataSet ds2 = banci.GetList(""); 每个comboBox都要写这一句。

C# Winform中 选中DatagridView控件中某行如何将该行某个字段(1,2,3,4,)的值绑定CheckedListBox控件的数

this.DatagridView1.SelectedRows[0].Cells[0].Value.ToString()//获取选中行的第一列的值
其他列以此类推
CheckedListBox1.Items.add(string value);//绑定追问

CheckedListBox1.Items.add(string value);//绑定
这个(string value)用不起啊,能说明清楚点吗?小弟初学者!!!麻烦各位大哥帮下忙了~

追答

string value是你要绑定的值,比如你需要列表绑定1、2、3代码如下:
CheckedListBox1.Items.add("1");
CheckedListBox1.Items.add("2");
CheckedListBox1.Items.add("3");

参考技术A 我是直接查找,再替换上去追问

那你是怎么做到的啊,能告诉我嘛??谢谢!!!

追答

private void dgvDic_CurrentCellChanged(object sender, EventArgs e)

在这儿检查是那个位置,以显示不同的列表框
switch(dgvDic.CurrentCell.ColumnIndex)

case 0:
。。。。
break;

case 1:
。。。。
break;




定位列表框的位置大小
public static void setComboBox(ref ComboBox cmbbox, ref DataGridView dgv)

Rectangle rect = new Rectangle();
rect = dgv.GetCellDisplayRectangle(dgv.CurrentCell.ColumnIndex, dgv.CurrentCell.RowIndex, false);
cmbbox.Left = rect.Left + dgv.Left;
cmbbox.Top = rect.Top + dgv.Top;
cmbbox.Width = rect.Width;
cmbbox.Height = rect.Height;
cmbbox.Visible = true;


替换值
private void cmbPageType_SelectedIndexChanged(object sender, EventArgs e)

dgvDic.CurrentCell.Value = tabPageType.Rows[cmbPageType.SelectedIndex]["t_type"].ToString();

参考技术B 先把值转成数组

以上是关于c# comboBox控件绑定表字段问题。如何同时绑定多个comboBox呢,使其下拉列表的内容都是一样的 见详细补充的主要内容,如果未能解决你的问题,请参考以下文章

Winform开发中如何将数据库字段绑定到ComboBox控件

C# 数据绑定 ComboBox 在其他控件中更改数据

c#怎么用comboBox绑定treeview控件

C# winForm程序 数据绑定 更新控件问题 combobox绑定的DataSource 数据表中已经添加了新的数据

WPF——ComboBox控件怎么绑定数据

C# winform程序 绑定listView1控件值(对应数据库表中的字段名) 循环绑定 insert into 语句中的到吗问题...