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