Mam 1 datatable posiadające 10 wierszy i list Listbox o 8 ListItems zawiera 6 rekordów z danych i 2 nowe rekordy.

Chcę zaktualizować datatable w taki sposób, że 6 rekordów powinno być tak, jak jest i usunąć pozostałe 4 rekordy z DataTable i dodaj 2 nowo dodanych wpisów z ListBox w DataLable.

Próbowałem, jest zapętlony rekord Listbox z DataTable i utworzonych listę dopasowanych rekordów.

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++;
    }
}
0
prashanat chaudhari 30 grudzień 2019, 10:06

1 odpowiedź

Najlepsza odpowiedź

Możesz to zrobić za pomocą Ling:

Aby utrzymać 6 rzędów i usunąć pozostałe 4 z DataTable:

//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;

Aby uzyskać nowe przedmioty z listy:

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;

I wreszcie zaktualizuj DATATABLE:

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

ważne

Może być konieczne zastąpienie dowolnego li.Text za pomocą li.Value w poprzednim kodzie i zależy od sposobu tworzenia obiektów na Listitem. Sprawdź To Więcej szczegółów.

0
31 grudzień 2019, 11:37