我在winform中开发了一个应用程序,它主要从它导入一个excel文件并显示它。在第二个表单上,用户要求创建具有特定奖品的N个随机数,并将其存储在2D数组中。之后,我从匹配ID的excel文件中拉出相同的记录和我创建的随机数,然后显示它们。这就是我如何拉取数据并用随机数绑定它们:
Dictionary<string, string> winnersList = new Dictionary<string, string>();
for (int i = 0; i < MyVariables.TotalWinners - 1; i++)
{
winnersList.Add(MyVariables.Winners[i, 0], MyVariables.Winners[i, 1]);
}
string idList = string.Join("','", winnersList.Select(x => x.Key));
dsWinners.Tables.Add(Form1.ds.Tables[0].Select("ID IN ('" + idList + "')").CopyToDataTable());
dsWinners.Tables[0].Columns.Add("Prize", typeof(string));
dsWinners.Tables[0].Rows.OfType<DataRow>().ToList().ForEach(x =>
{
x["Prize"] = winnersList[x["ID"].ToString()];
});
dsWinners.Tables[0].Columns["ID"].SetOrdinal(0);
dsWinners.Tables[0].Columns["Prize"].SetOrdinal(1);
dataGridView1.DataSource = dsWinners.Tables[0];
现在一切正常,直到我尝试绘制/创建新列表。多数民众赞成在这一行上我得到这个错误:
dsWinners.Tables[0].Columns.Add("Prize", typeof(string));
现在我试图在表格关闭中处理dsWinners,
我尝试在尝试之前删除列,并抓住:
Dictionary<string, string> winnersList = new Dictionary<string, string>();
dsWinners.Tables[0].Columns.Remove("Prize");
for (int i = 0; i < MyVariables.TotalWinners - 1; i++)
{
winnersList.Add(MyVariables.Winners[i, 0], MyVariables.Winners[i, 1]);
}
string idList = string.Join("','", winnersList.Select(x => x.Key));
try
{
dsWinners.Tables.Add(Form1.ds.Tables[0].Select("ID IN ('" + idList + "')").CopyToDataTable());
dsWinners.Tables[0].Columns.Add("Prize", typeof(string));
dsWinners.Tables[0].Rows.OfType<DataRow>().ToList().ForEach(x =>
{
x["Prize"] = winnersList[x["ID"].ToString()];
});
dsWinners.Tables[0].Columns["ID"].SetOrdinal(0);
dsWinners.Tables[0].Columns["Prize"].SetOrdinal(1);
dataGridView1.DataSource = dsWinners.Tables[0];
}
catch
{
dsWinners.Tables.Add(Form1.ds.Tables[0].Select("ID IN ('" + idList + "')").CopyToDataTable());
dsWinners.Tables[0].Columns.Add("Prize", typeof(string));
dsWinners.Tables[0].Rows.OfType<DataRow>().ToList().ForEach(x =>
{
x["Prize"] = winnersList[x["ID"].ToString()];
});
dsWinners.Tables[0].Columns["ID"].SetOrdinal(0);
dsWinners.Tables[0].Columns["Prize"].SetOrdinal(1);
dataGridView1.DataSource = dsWinners.Tables[0];
}
我得到了这个错误&#34;字典中没有给定的密钥&#34; 在catch的这一行:
x["Prize"] = winnersList[x["ID"].ToString()];
当我尝试在表单关闭时执行此操作:
dsWinners.Tables[0].Clear();
dsWinners.Tables[0].Rows.Clear();
dsWinners.Tables[0].Columns.Clear();
我收到此错误&#34;对象引用未设置为对象的实例。&#34;在这一行:
dsWinners.Tables[0].Columns["ID"].SetOrdinal(0);
如果我删除那条线而下面的那条线,我没有得到任何错误,但我也没有得到任何结果!再次,它第一次工作正常,但当我关闭表格并重做它...我得到这些错误。我怎么能克服这个问题?