C# 如何从字符串生成器或列表填充Datagridview/Listview?

C# 如何从字符串生成器或列表填充Datagridview/Listview?,c#,winforms,C#,Winforms,我有一段代码,使用字符串生成器将所有记录显示到消息框中。现在我需要将序列号填充到数据网格视图或列表视图中 相似 在将记录添加到列表中时,我使用以下代码替换消息框: private readonly StringBuilder _builder = new StringBuilder().AppendLine(); Private Dataset _dsdata; private void SerialVerification() {

我有一段代码,使用字符串生成器将所有记录显示到消息框中。现在我需要将序列号填充到数据网格视图或列表视图中

相似

在将记录添加到列表中时,我使用以下代码替换消息框:

        private readonly StringBuilder _builder = new StringBuilder().AppendLine();
        Private Dataset _dsdata;

private void SerialVerification()

        {
            // instantiate BAL
            var obj = new BusinessLogic();
            var fin = new Entity { SerialNumber = txtSerialNumber.Text};
            try
            { 
                    try
                    {
                                    //Check if Serial is on DB
                                    _dsdata = obj.SelectSerial(fin);

                                    if (_dsdata.Tables[0].Rows.Count < 1)
                                    {
                                        //Not on DB table then SAVE

                                        try
                                        {   
                                           //Message SAVE ON DB

                                            _i++;
                                            _builder.Append(txtSerialNumber.text).AppendLine();   
                                            lblcount.Text = @"Unit Count:" + _i;

                                        }
                                        catch (Exception ee)
                                        {
                                        }

                                    }
                                    else
                                    {
                                        _dates  Convert.ToDateTime(_dsdata.Tables[0].Rows[0][2].ToString()).ToShortDateString();

                                        if(_dates == DateTime.Today.ToShortDateString())
                                        {

                                           //Check Duplicate
                                        }
                                        else
                                        {
                                           //Message SAVE ON DB
                                            _i++;
                                            _builder.Append(txtSerialNumber.Text).AppendLine();  
       lblcount.Text = @"Unit Count:" + _i;
                                        }
                                    }
                    }
                    catch(Exception ee)
                    {
                    }

                if(_i>0)
                {
                    listView1.Items.Clear();

                    foreach(var a in r)
                    {
                        var listItem = new ListViewItem(_builder.ToString()) ;


                        listView1.Items.Add(listItem);  
                    }

                    //MessageBox.Show(_builder.ToString());


                }
                else
                {

                }

            }
            catch (ApplicationException ex)
            {

            }

        }
感谢您在写以下内容时

var r = new List<StringBuilder> { _builder };
var r=newlist{{u builder};

您将始终创建一个列表,其中正好有一个stringbuilder(即_builder);无论_builder实例包含什么内容。因此,当您迭代此列表时,它将始终创建一个listitem,其中包含构建器的全部内容。因此,您必须在列表中添加更多的StringBuilder,或者将_builder实例的内容拆分为多个字符串并对其进行迭代。

更新:

查看您的最新问题后:

是的,您的prev代码的行为与之类似,因为对于对SerialVerification方法的每次调用,\u builder都会附加这些项

例如:对于输入1-_builder=1\r\n;listview有1个换行符; 现在对于2-\u builder=1\r\n2\r\n,listView有1个换行符和2个换行符; 3号也一样

这就是你看到1,12,123的原因。 为什么要缓存builder或items(在你的回复帖子中)。因为您维护一个缓存,所以每次添加一个新项目时,您都必须清除listview;即使您必须维护缓存,也不要使用缓存中的项目填充listview

这里是SerialVerification的另一个版本,它不使用_items/_builder,希望能有所帮助

 private void SerialVerification(String serialNumber)
    {
        // verify that we have the serial number with us
        // HasSerialNumber does a DB look up for this serial number
        // and returns true / false accordingly;
        Boolean hasSerialNumber = HasSerialNumber(serialNumber);

        if (hasSerialNumber)
        {
            // verify that we don't have the serial number already in the ListView;
            // if not add it to the listview;
            listView1.Items.Add(serialNumber);
        }
    }

_builder是
StringBuilder[]还是List

是否在每个StringBuilder中存储一个长字符串

可以通过设置

 this.listView1.View = View.List;
但我会在下面这样做,在StringBuilder中存储多个项,并将其添加到listview中

StringBuilder stringBuilder = new StringBuilder();

    stringBuilder.AppendFormat("{0}|", "One");
    stringBuilder.AppendFormat("{0}|", "Two");
    stringBuilder.AppendFormat("{0}|", "Three");
    stringBuilder.AppendFormat("{0}|", "Four");

    List<String> items = 
        new List<String>(stringBuilder.ToString().Split(new Char[] { '|' }, StringSplitOptions.RemoveEmptyEntries));

    foreach (String item in items)
    {
        listView1.Items.Add(item);
    }
StringBuilder StringBuilder=新建StringBuilder();
AppendFormat(“{0}|“,“一”);
AppendFormat(“{0}|“,“两”);
AppendFormat(“{0}|“,“三”);
AppendFormat(“{0}|“,“四”);
列表项=
新列表(stringBuilder.ToString().Split(新字符[]{'|'},StringSplitOptions.RemoveEmptyEntries));
foreach(项中的字符串项)
{
listView1.Items.Add(项目);
}
我得到了答案 我将代码替换为:

//private readonly StringBuilder _builder = new StringBuilder().AppendLine(); 
private readonly List<String> _items = new List<string>();


您在r中实际有多少项?你确定你有不止一个项目吗?是的……如果我>0,我需要计算listviewWow上的零件号,你在我发布答案时更改了你的问题。var r的初始化到哪里去了?哎呀。。抱歉..如果(_i>0)仍处于启用状态..感谢提供示例…我使用的是列表而不是stringbuilder。
//private readonly StringBuilder _builder = new StringBuilder().AppendLine(); 
private readonly List<String> _items = new List<string>();
 // _builder.Append(fin.SerialNumber).AppendLine();   
      _items.Add(txtSerialNumber.Text);
                 listView1.Items.Clear();

                foreach(var item in _items)
                {

                    listView1.Items.Add(item.ToString());

                }