【问题标题】:how to display value in listbox from dataview如何从数据视图中显示列表框中的值
【发布时间】:2015-11-02 16:37:15
【问题描述】:

我在 winform 应用程序中有一个文本框和列表框。当我在文本框中输入值(即字符串)时,我希望列表框显示数据表中的值,当我从列表框中选择特定值时,它将显示在文本框中。

代码:

private void txtIName_TextChanged(object sender, EventArgs e)
        {
            string constring = "Data Source=.;Initial Catalog=Test;User Id=sa;Password=admin@123";
            using (SqlConnection con = new SqlConnection(constring))
            {
                using (SqlCommand cmd = new SqlCommand("SELECT distinct * FROM Item_Details", con))
                {
                    cmd.CommandType = CommandType.Text;
                    using (SqlDataAdapter sda = new SqlDataAdapter(cmd))
                    {
                        using (dt = new DataTable())
                        {
                            sda.Fill(dt);                            
                            DataView dv = new DataView(dt);
                            dv.RowFilter = string.Format("IName Like '%{0}%'", txtIName.Text);
                            listBox1.Visible = true;
                            listBox1.DataSource = dv;

                        }
                    }
                }
            }
        }

但我在“system.data.datarow”之类的列表框中得到了输出。通过调试,我可以在 dataview 'dv' 中看到我想要的行。我在这里想念什么?谢谢。

【问题讨论】:

  • 您必须将listBox1.DisplayMember设置为您要查看的列名
  • 在看到你的评论之前,我通过谷歌搜索得到了输出。但我不知道如何在列表框中的文本框中显示值。感谢您的努力。

标签: c# winforms listbox


【解决方案1】:

您不需要在每次TextChanged 事件触发时加载数据。在表单的Load 事件中加载数据就足够了,然后在TextChanged 中仅过滤数据。然后使用DoubleClick of ListBox 之类的事件设置TextBox 的文本:

private DataTable dataTable = new DataTable();
private void Form1_Load(object sender, EventArgs e)
{
    string constring = @"Data Source=.;Initial Catalog=Test;User Id=sa;Password=admin@123";
    using (SqlConnection con = new SqlConnection(constring))
    {
        using (SqlDataAdapter sda = new SqlDataAdapter("SELECT distinct * FROM Item_Details", con))
        {
            sda.Fill(dataTable);
        }
    }
    this.listBox1.DataSource = new DataView(dataTable);
    this.listBox1.DisplayMember = "IName";
    this.listBox1.Visible = false;
}
private void txtIName_TextChanged(object sender, EventArgs e)
{
    var dv = (DataView)this.listBox1.DataSource;
    dv.RowFilter = string.Format("IName Like '%{0}%'", txtIName.Text);
    listBox1.Visible = true;
}
private void listBox1_DoubleClick(object sender, EventArgs e)
{
    var item = (DataRowView)listBox1.SelectedItem;
    if (item != null)
        this.txtIName.Text = item["IName"].ToString();
    else
        this.txtIName.Text = "";

    this.listBox1.Visible = false;
}

不要忘记将Form1_LoadtxtIName_TextChangedlistBox1_DoubleClick 处理程序附加到事件。

【讨论】:

  • 请帮我编码,因为我是 C# 新手。不,我不希望用户单击按钮来输入数据。我只是希望用户单击输入按钮或鼠标单击以选择该值。
  • 您的代码将错误显示为“错误 1 ​​找不到类型或命名空间名称 'DataRowview'(您是否缺少 using 指令或程序集引用?)”
  • 要更改以前的版本代码,使用DataRowView,但我认为我为您编写的新代码更适合。
  • 我用更正的拼写错误测试了更新,它在这里正常工作。
  • @Raja aar 你可能错过了某个命名空间的使用。
【解决方案2】:

您必须指定您的 DisplayMember,它必须是 DataView 中的某个字段

listBox1.DisplayMember = "Your Field" 

然后您可以订阅事件 SelectedValueChanged :

 listBox1.SelectedValueChanged += new EventHandler(listBox1_SelectedValueChanged);

visual studio 为您创建一个事件处理程序

  void listBox1_SelectedValueChanged(object sender, EventArgs e)
        {
            // you get your selected item here
        }

希望对你有帮助

【讨论】:

  • 是的,它的工作原理。当我从中选择时,我还想在文本框中显示其中一个列表框值。我是 c# 新手,我不知道如何在其中显示值。谢谢。
  • private void listBox1_SelectedValueChanged(object sender, EventArgs e) { txtIName.Text = listBox1.SelectedValue.ToString();我尝试了这段代码,但得到了类似“system.data.datarow”的输出。
  • DataRow dr = (DataRow)listBox1.SelectedItem; txtIName.Text = drv["MyField "].ToString();//用你的字段/列名替换 MyField [也许是 DataRowView 而不是 DataRow ,两者都可以]
  • 在 drv.Row 中显示(单词 Row 中的红色下划线)错误
  • 我从@Reza Agaei 的回答中挑选了这段代码,我认为这一定能工作
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-03-24
  • 2020-01-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多