Combobox数据绑定显示system.data.datarowview
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Combobox数据绑定显示system.data.datarowview相关的知识,希望对你有一定的参考价值。
我将combobox与datasource,displaymember,valuemember绑定。它在我的电脑上工作正常,但它不适用于客户端电脑。以下是我的源代码:
从UserControl的构造函数调用cbxAlloyBinding方法。
private void cbxAlloyBinding()
{
DataTable dt = new DataTable();
SqlDataAdapter adp = new SqlDataAdapter("SELECT alloyName,alloyId FROM alloy", con);
adp.Fill(dt);
if (dt.Rows.Count > 0)
{
cbxMetal.DisplayMember = "alloyName";
cbxMetal.ValueMember = "alloyId";
cbxMetal.DataSource = dt;
}
else
{
cbxMetal.Text = "";
}
}
private void cbxMetal_SelectedIndexChanged(object sender, EventArgs e)
{
if (cbxMetal.SelectedIndex != -1)
{
DataTable dt = new DataTable();
tempcmd = new SqlCommand("SELECT specification,alloyCode FROM alloy where alloyId='" + cbxMetal.SelectedValue + "'", con);
SqlDataAdapter adp = new SqlDataAdapter(tempcmd);
adp.Fill(dt);
if (dt.Rows.Count > 0)
{
txtSpecification.Text = dt.Rows[0]["alloyCode"].ToString();
txtSupplyConditions.Text = dt.Rows[0]["specification"].ToString();
cbxheatBinding();
}
else
{
txtSpecification.Text = "";
}
}
}
这让我困扰了最近两天,我几乎尝试了所有的技巧,但它仍然无法正常工作。
客户端的PC使用的是Windows 7 ultimate,sql server 2005和.net framework 3.5。
如果在构造函数中调用cbxMetal_SelectedIndexChanged
之前调用cbxAlloyBinding()
,则肯定会发生这种情况。
例如(参见下面的代码),您可能在构造函数中有其他组合框绑定,这可能在构造函数中的cbxAlloyBinding()
之前,并且这些绑定调用cbxMetal_SelectedIndexChanged
。
public Constructor()
{
InitializeComponent();
cbxheatBinding(); //1st Three Binding Methods may be somehow related to your cbxMetal,
dtpStartDateBinding(); //which leads them to call cbxMetal_SelectedIndexChanged method.
dtpEndDateBinding();
cbxAlloyBinding();
}
我怀疑你的cbxMetal.DataSource
是从你的代码中的其他一点设置的,并且在DisplayMember
和ValueMember
被分配之前;
请记住,System.DataRow.DataRowView
只会发生
在
ComboBox.SelectedValue
任命之前调用ValueMember
。
在设置DisplayMember
之后设置ValueMemeber
和DataSource
为我解决了这个问题。
cbxMetal.DataSource = dt;
cbxMetal.DisplayMember = "alloyName";
cbxMetal.ValueMember = "alloyId";
似乎问题不在于您在此处粘贴的代码,它可能与客户端环境,连接,权限等有关。您必须提供有关“它在客户端PC中不起作用”的更多信息。他们使用什么系统,错误是什么,你在客户端试过调试吗?
*编辑:*然后你必须找到从一开始就跟踪所有操作的问题。我的建议是制作一个虚拟窗体应用程序,只需一个标准形式,一个组合框和一个按钮。在按钮的单击事件上,只需执行您所做的操作。 JUst绑定组合并将此临时应用程序发送到客户端。如果它工作,然后一步一步.Ex:
private void button1_Click(object sender, EventArgs e)
{
string conStr = "Data Source=PC-303\SQLEXPRESS;Initial Catalog=sokaklar;User ID=sa;Password=*****";
SqlDataAdapter adapter = new SqlDataAdapter("SELECT DISTINCT IL, IL_ID FROM sokaklar ORDER BY IL", new SqlConnection(conStr));
DataTable dt = new System.Data.DataTable();
adapter.Fill(dt);
comboBox1.DisplayMember = "IL";
comboBox1.ValueMember = "IL_ID";
comboBox1.DataSource = dt;
}
我在一分钟内创建了这个应用程序,它对我有用。
我解决了这个问题:
/*First get DataSource*/
comboBox1.DataSource = dt;
/*Then determine DisplayMember y ValueMember*/
comboBox1.DisplayMember = "YOUR_FIELD_NAME";
comboBox1.ValueMember = "YOUR_OTHER_FIELD_NAME";
这仅适用于System.Data.DataTable或List数据源
它向我展示了同样的例外,所以我做了这个并且它起作用了
private void cb_category_SelectedIndexChanged(object sender, EventArgs e)
{
DataTable mydt = new DataTable();
try
{
mydt = request.GetItem(int.Parse(cb_category.SelectedValue.ToString()));
}
catch { }
if(mydt.Rows.Count>0)
{
cb_Item.DataSource = mydt;
cb_Item.DisplayMember = "dispmember";
cb_Item.ValueMember = "valmember";
}
else
{
cb_Item.DataSource = null;
}
}
这将非常有助于您
在load事件上你想要只写这段代码
onformload()
{
cmb_dept.Items.Clear();
SqlConnection conn = new SqlConnection(@"DATA SOURCE=(localdb)MSSQLLocalDB;INTEGRATED SECURITY=true;INITIAL CATALOG=EMPLOYEE;");
conn.Open();
SqlCommand command = new SqlCommand("select dept_id, dept_name from department", conn);
SqlDataAdapter adapter = new SqlDataAdapter(command);
DataSet ds = new DataSet();
adapter.Fill(ds);
cmb_dept.ValueMember = "dept_id";
cmb_dept.DisplayMember = "dept_name";
cmb_dept.DataSource = ds.Tables[0];
}
尝试使用使用您想要访问值的代码........
string dept = cmb_dept.Text;
MessageBox.Show("val=" + dept);
你的combobox.text = System.Data.DataRowView将解决##
“comboBox1.SelectedValue”返回对象,你想要作为字符串,所以转换它Convert.ToString(comboBox1.SelectedValue),然后使用
例如:
tempcmd = new SqlCommand("SELECT specification,alloyCode FROM alloy where alloyId='" + Convert.ToString(cbxMetal.SelectedValue) + "'", con);
以上是关于Combobox数据绑定显示system.data.datarowview的主要内容,如果未能解决你的问题,请参考以下文章
DataSource绑定DataTable.Select()显示system.data.DataRow问题解决的方法
c# Combobox 显示 System.Data.Datarowview 因为点