【问题标题】:data are not transmitted in the listview数据不在列表视图中传输
【发布时间】:2016-05-31 11:34:37
【问题描述】:

我有两个 xml 文件。如果从下拉列表中选择,则 XML 文件中的数据被移动到表中。但是当我点击第二个时只工作第一个xml文件,然后什么也没有发生,表格没有填满。我的错误在哪里?

private void listView1_SelectedIndexChanged(object sender, EventArgs e)
    {

        if (listView1.SelectedItems.Count > 0)
        {
            ListViewItem lv = listView1.SelectedItems[0];
            textBox1.Text = lv.SubItems[1].Text;
            textBox2.Text = lv.SubItems[2].Text;
            textBox3.Text = lv.SubItems[3].Text;

        }

    }

    private void comboBox1_SelectedIndexChanged_1(object sender, EventArgs e)
    {
        if (comboBox1.SelectedIndex == 0)
        {
            DataSet ds = new DataSet();
            DataTable dt = new DataTable();
            ds.ReadXml(@"C:\XMLFile1.xml");
            dt = ds.Tables[0];
            if (dt.Rows.Count > 0)
            {
                int i = 0;
                foreach (DataRow Dr in dt.Rows)
                {
                    ListViewItem lv = new ListViewItem(dt.Rows[i]["ID"].ToString());
                    lv.SubItems.Add(dt.Rows[i]["Name"].ToString());
                    lv.SubItems.Add(dt.Rows[i]["group"].ToString());
                    lv.SubItems.Add(dt.Rows[i]["document"].ToString());
                    i++;
                    listView1.Items.Add(lv);


                }
            }
            if (comboBox1.SelectedIndex == 1)
            {
                DataSet ds1 = new DataSet();
                DataTable dt1 = new DataTable();
                ds1.ReadXml(@"C:\XMLFile1.xml");
                dt1 = ds1.Tables[0];
                if (dt1.Rows.Count > 0)
                {
                    int i = 0;
                    foreach (DataRow qw in dt1.Rows)
                    {
                        ListViewItem lv = new ListViewItem(dt1.Rows[i]["ID"].ToString());
                        lv.SubItems.Add(dt1.Rows[i]["Name"].ToString());
                        lv.SubItems.Add(dt1.Rows[i]["group"].ToString());
                        lv.SubItems.Add(dt1.Rows[i]["document"].ToString());
                        i++;
                        listView1.Items.Add(lv);


                    }
                }
            }

【问题讨论】:

  • 代码可能没有问题。 ListView 无法识别控件发生的任何更改,因此不会刷新控件。通常在填充之前清除行会有所帮助。 clear 方法调用控件的paint 方法,刷新控件,然后添加新数据就可以了。
  • 但是如果我只选择第二个将填写表格的文件,它将是空的。填表应该是第一个还是第二个xml文件
  • 如果只将第二个 xml 文件添加到 ListView 而不添加第一个文件会怎样?

标签: c# xml winforms


【解决方案1】:

两个 comboBox1 选项的文件完全相同: ds.ReadXml(@"C:\XMLFile1.xml");。我假设第二个文件的 @"C:\XMLFile1.xml" 必须不同。

private void comboBox1_SelectedIndexChanged_1(object sender, EventArgs e)
{ //Opening bracket 1
    if (comboBox1.SelectedIndex == 0) //Option 1
    { //Opening bracket 2

        ds.ReadXml(@"C:\XMLFile1.xml");  //<<====================== File1
        dt = ds.Tables[0];
        if (dt.Rows.Count > 0)
        {//Opening bracket 3
            int i = 0;
            foreach (DataRow Dr in dt.Rows)
            {//Opening bracket 4
                ListViewItem lv = new ListViewItem(dt.Rows[i]["ID"].ToString());
                lv.SubItems.Add(dt.Rows[i]["Name"].ToString());
                lv.SubItems.Add(dt.Rows[i]["group"].ToString());
                lv.SubItems.Add(dt.Rows[i]["document"].ToString());
                i++;
                listView1.Items.Add(lv);


            }//Closing bracket 4
        }//Opening bracket 3
    }//Closing Bracket 2
    if (comboBox1.SelectedIndex == 1)  //Option 2
    {
         DataSet ds1 = new DataSet();
         DataTable dt1 = new DataTable();
         ds1.ReadXml(@"C:\XMLFile1.xml");     //<<====================== still File1
         dt1 = ds1.Tables[0];
         if (dt1.Rows.Count > 0)
         {
             int i = 0;
             foreach (DataRow qw in dt1.Rows)
             {
                 ListViewItem lv = new ListViewItem(dt1.Rows[i]["ID"].ToString());
                 lv.SubItems.Add(dt1.Rows[i]["Name"].ToString());
                 lv.SubItems.Add(dt1.Rows[i]["group"].ToString());
                 lv.SubItems.Add(dt1.Rows[i]["document"].ToString());
                 i++;
                 listView1.Items.Add(lv);



            }
        }
    }
}//Closing Bracket 1

编辑:

  1. 计算你的左括号和右括号
  2. 您只是添加到列表视图listView1.Items.Add(lv)。除非您删除旧条目,否则新条目将出现在列表底部或混入其中。

【讨论】:

  • 哦,我失败了。程序无法正常运行,即使纠正了这个问题
  • 再看我的回答,你错过了右括号2(括号为第一个if语句块,这意味着你的if (comboBox1.SelectedIndex == 1)if (comboBox1.SelectedIndex == 0)块内,这意味着它永远不会被执行
猜你喜欢
  • 2016-02-13
  • 2011-10-04
  • 1970-01-01
  • 1970-01-01
  • 2020-06-21
  • 1970-01-01
  • 1970-01-01
  • 2014-03-29
  • 1970-01-01
相关资源
最近更新 更多