如何绑定List到datagridView
本文关键字:string datagridView List 何绑定 绑定 | 更新日期: 2023-09-27 18:10:24
我正在尝试使用以下代码在datagridview中显示List的内容。
List<string> data = new List<string>();
dataGridView1.DataSource = data;
我正在将我的数据添加到backgroundWorker中的列表中。如果我将List更改为BindingList,我得到一个错误说
Cross-thread operation not valid: Control 'dataGridView1' accessed from a thread other than the thread it was created on.
然而,如果我使用列表,当数据网格显示它时,我得到第三列,它只包含类别中每个条目的字符串长度。
有没有人知道如何让数据网格显示字符串内容而不是字符串长度,而使用BackgroundWorker?
private void OnBackgroundWorkerDoWork(object sender, DoWorkEventArgs e)
{
importExcelFile();
}
private void importExcelFile()
{
// hard coded file name for testing.
TextFieldParser parser = new TextFieldParser(@"E:''test.csv");
parser.TextFieldType = FieldType.Delimited;
parser.SetDelimiters(",");
while (!parser.EndOfData)
{
//Processing row
string[] fields = parser.ReadFields();
foreach (string field in fields)
{
//TODO: Process field
data.Add(field);
}
}
parser.Close();
}
private void loadFileToolStripMenuItem_Click(object sender, EventArgs e)
{
backgroundWorker1.DoWork += OnBackgroundWorkerDoWork;
backgroundWorker1.RunWorkerAsync();
}
private void OnBackgroundWorkerRunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e)
{
dataGridView1.DataSource = data;
}
您可以与BackgroundWorker.ReportProgress
传递list。I允许传递进度和自定义对象(MSDN上的完整列示)。处理这个事件是UI线程,所以它将是正确的。
如果你最后需要这个,只需使用RunWorkerCompletedEventArgs。结果(同样在MSDN上定义)
基于如何绑定List
public class StringValue
{
public StringValue(string s)
{
_value = s;
}
public string Value { get { return _value; } set { _value = value; } }
string _value;
}
将List更改为List
我正在获取数据,但它出现在第3列。我假设只有两列。
请创建一个委托并使用control.Invoke
调用该委托
你可以这样使用Invoke:
private void AddToListBox(object oo)
{
Invoke(new MethodInvoker(delegate { listBox.Items.Add(oo); }));
}
关于Background Worker的更多信息
祝你好运!
使用下面的代码。我也遇到过类似的问题,但是用LinQ解决了。
IList<String> listObj = new List<String>();
dataGridView1.DataSource = listObj.Select(x => new { Value = x }).ToList();
,
dataGridView1 :- ID of datagridview