一个名为' Prize'已经属于此DataTable

时间:2015-06-11 18:30:47

标签: c# datagridview dataset

我在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);

如果我删除那条线而下面的那条线,我没有得到任何错误,但我也没有得到任何结果!再次,它第一次工作正常,但当我关闭表格并重做它...我得到这些错误。我怎么能克服这个问题?

0 个答案:

没有答案