带记录的数据表自定义

DataTable customization with records

我有 1 个具有 10 行的数据表和具有 8 个列表项的列表框,其中包含数据表中的 6 条记录和 2 条新记录。

我想更新 DataTable,使 6 条记录保持原样,并从 DataTable 中删除剩余的 4 条记录,并从 DataTable 的 ListBox 中添加 2 个新添加的条目。

我尝试的是从 DataTable 循环 ListBox 记录并创建匹配记录列表。

string impactedTC;
List<int> index = new List<int>();
// This retruns my dataset having 10 records           
DataTable dttable = GetImpactedTestCaseDetailsToUpdateStatus().Tables[0];

for (int i = 0; i < ListBox1.Items.Count; i++)
{
    int count = 0;

    string dTestCase = ListBox1.Items[i].Text;
    foreach (DataRow dtRow in dttable.Rows)
    {
        impactedTC = dtRow["TestCaseName"].ToString();
        if (impactedTC == dTestCase)
        {
            index.Add(count);
        }
        count++;
    }
}

您可以使用 Ling:

要保留 6 行并从 DataTable 中删除剩余的 4 行:

//Assuming the names are DataTable1 and ListBox1.
var rowsToRemove = from r in DataTable1.Rows.Cast<DataRow>()
        where listBox1.Items
        .Cast<ListItem>()
        .Aggregate(0, (n, li) => li.Text.ToLower() == r.Field<string>("TestCaseName").ToLower() ? n + 1 : n) == 0
        select r;

要从列表框中获取新项目:

var newItems = from li in listBox1.Items.Cast<ListItem>()
                where DataTable1.Rows
                .Cast<DataRow>()
                .Aggregate(0, (n, r) => r.Field<string>("TestCaseName").ToLower() == li.Text.ToLower() ? n + 1 : n) == 0
                select li;

最后更新数据表:

rowsToRemove.ToList().ForEach(r => DataTable1.Rows.Remove(r));
newItems.ToList().ForEach(li => DataTable1.Rows.Add(li.Text)); //or maybe li.Value

Important

You might need to replace any li.Text with li.Value in the preceding code and that depends on how the ListItem objects are created. Please check this for more details.