C# 名为';奖品';已属于此数据表

C# 名为';奖品';已属于此数据表,c#,datagridview,dataset,C#,Datagridview,Dataset,我在winform中开发了一个应用程序,主要从中导入excel文件并显示。在第二个表单中,用户要求创建N个带有特定奖励的随机数,我将它们存储在2D数组中。之后,我从excel文件中提取相同的记录,将ID与我创建的随机数字匹配,并显示它们。这就是我拉取数据并用随机数绑定它们的方式: Dictionary<string, string> winnersList = new Dictionary<string, string>(); for (int i = 0; i <

我在winform中开发了一个应用程序,主要从中导入excel文件并显示。在第二个表单中,用户要求创建N个带有特定奖励的随机数,我将它们存储在2D数组中。之后,我从excel文件中提取相同的记录,将ID与我创建的随机数字匹配,并显示它们。这就是我拉取数据并用随机数绑定它们的方式:

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];
现在我试着在表格结束的时候

我在尝试捕捉之前尝试移除这些列,如:

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];
}
当我尝试在表单关闭时执行此操作时:

dsWinners.Tables[0].Clear();
dsWinners.Tables[0].Rows.Clear();
dsWinners.Tables[0].Columns.Clear();
我收到以下错误:“对象引用未设置为对象的实例”。在此行:

dsWinners.Tables[0].Columns.Add("Prize", typeof(string));
dsWinners.Tables[0].Columns["ID"].SetOrdinal(0);

如果我删除了那一行和下面的那一行,我不会得到任何错误,但也不会得到任何结果!再一次,它在第一次工作时很好,但是当我关闭表单并重做它时…我会得到这些错误。如何克服这个问题?

我认为第二个例外是因为在try内的字典中该键的迭代已完成。什么是dsWinners?你能在每次使用前实例化它吗it@DanHunex例举字典赢家名单,你是说?还是怎样因为winnersList已经是dictionary的一个实例了!我认为第二个例外是因为在try内的字典中该键的迭代已经完成?你能在每次使用前实例化它吗it@DanHunex例举字典赢家名单,你是说?还是怎样因为winnersList已经是dictionary的一个实例了!我认为第二个例外是因为在try内的字典中该键的迭代已经完成?你能在每次使用前实例化它吗it@DanHunex例举字典赢家名单,你是说?还是怎样因为winnersList已经是dictionary的一个实例了!
dsWinners.Tables[0].Columns["ID"].SetOrdinal(0);