把ComboBox組件系結到一個已經初始化結構但未賦值的空行DataTable上,然后動態增加DataRow,圖形效果正確,但是運行報錯。
代碼如下。
private void button1_Click(object sender, EventArgs e)
{
dtTest = new DataTable();
dtTest.Columns.Add("ID");
comboBox1.DisplayMember = "ID";
comboBox1.ValueMember = "ID";
comboBox1.DataSource = dtTest;
dtTest.Rows.Add(new Object[]{"1"});
}
運行代碼
dtTest.Rows.Add(new Object[]{"1"});后輸出視窗中提示:在 System.ArgumentOutOfRangeException 中第一次偶然出現的“System.Windows.Forms.dll”型別的例外
哪位大佬能幫忙看看
uj5u.com熱心網友回復:
datatable添加列,行,再綁定comboboxdtTest = new DataTable();
dtTest.Columns.Add("ID");
dtTest.Rows.Add(new Object[] { "1" });
comboBox1.DisplayMember = "ID";
comboBox1.ValueMember = "ID";
comboBox1.DataSource = dtTest;
uj5u.com熱心網友回復:
我知道先增加行再系結就沒問題,只是想知道為什么系結空行后再動態增加就提示這樣的錯誤,也沒找到相關的說明。只找到一個說法是執行緒和界面之間的問題,也沒說具體的。
有沒有大佬分析下
uj5u.com熱心網友回復:
如果是從非UI執行緒中進行dtTest.Rows.Add(),在WinForm下會出現跨UI執行緒呼叫的問題。
在這種情況下,要用Control.Invoke()或SynchronizationContext.Send()。
public partial class Form1 : Form
{
// ...
void 執行緒任務()
{
var id = 耗時任務_獲取Id();
this.Invoke((Action)delegate
{
dtTest.Rows.Add(new Object[] { id });
});
}
}
uj5u.com熱心網友回復:
注:當dtTest已經系結到UI元素的時候,從非UI執行緒中更新dtTest需要Control.Invoke()。
uj5u.com熱心網友回復:
多謝回復。invoke的問題我知道,不過這個datatable的問題不是invoke的原因。你看我給的那段測驗代碼,就是簡單的一個button按鈕按下事件。
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/56948.html
標籤:C#
上一篇:基于C#地面站軟體
