开发者

How to Populate Datagridview/Listview from string builder or list?

I have this Code of Showing all Records to a Message box using string builder. Now i need to populate the Serialnumbers to a data grid view or list view.

Similar in My First Question

I replace message box with this code in adding the records to list:

        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)
                    {
          开发者_StackOverflow社区          }

                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)
            {

            }

        }

It does not creating new line/Row in list view but just populating only one row. Is there any solution other than using string builder.

Entry of serialnumber: 1 2 3

My list Displays using my sample code:

1
12
123


Correct: 
        1
        2
        3

Thanks in regards..


When you write :

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

You will always create a list with exactly 1 stringbuilder (which is _builder); no matter what the _builder instance contains. So when you iterate over this list, it will always create 1 listitem, with the full contents of your builder. So you either have to put more StringBuilders in your list, or split the contents of your _builder instance into mulitple strings and iterate over those.


Update:

After looking at your updated question:

Yes, your prev code behaves like it does because, for each call to SerialVerification method, _builder appends the items

ex: for input 1 - _builder = 1\r\n; and the listview has 1 NewLine; now for 2 - _builder = 1\r\n2\r\n and the listView has 1 NewLine 2 NewLine; same for 3.

That is the reason you see 1 , 12, 123. Why are you caching _builder or _items (in your answer post). Because you maintain a cache, every time you add a new item you are forced to clear the listview; even you have to maintain cache don't populate the listview with items from the cache;

Here is another version of SerialVerification which doesn't use _items / _builder, hope it might help.

 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);
        }
    }

Is _builder a StringBuilder[] or List<StringBuilder> 's?

Are you storing one long string in each StringBuilder?

The output you want, which is showing each item in a separate line could be achieved by setting the

 this.listView1.View = View.List;

But I would do something like this below to store multiple items in a StringBuilder and add it to a 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);
    }


I got the answer i replace my code to this:

//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());

                }
0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜