[C#] Usuwanie pustych pozycji z dataTable

0

Panie i Panowie, mam taki kod:

DataTable dt = new DataTable("Exchange");
dt.Columns.Add("CatalogueNumber", typeof(string));
dt.Columns.Add("Qty", typeof(string));  
              dt.Rows.Add(tZText.ToString(), tIloscZ.Text.ToString());
            dt.Rows.Add(tB.Text.ToString(), tIloscB.Text.ToString());
            dt.Rows.Add(tP.Text.ToString(), tIloscP.Text.ToString());
            dt.Rows.Add(tS.Text.ToString(), tIloscSt.Text.ToString());
            dt.Rows.Add(tPo.Text.ToString(), tIloscPr.Text.ToString());
            dt.Rows.Add(tSo.Text.ToString(), tIloscSjj.Text.ToString());
            dt.Rows.Add(tLa.Text.ToString(), tIloscLac.Text.ToString());
            dt.Rows.Add(tSi.Text.ToString(), tIloscSi.Text.ToString());
            dt.Rows.Add(tStyP.Text.ToString(), tIloscSm.Text.ToString());         

            DataSet NewDataSet = new DataSet();
          
            NewDataSet.Tables.Add(dt);
            
            NewDataSet.WriteXml("C:\\...Exchange.xml"), XmlWriteMode.IgnoreSchema);

Potrzebuje z tej tabeli wyrzucić pozycje (rzędy), w które są puste (niektóre textbox'y są bez wartości).

Wymyśliłem coś takiego:

if (dt.Rows[0]["CatalogueNumber"].Equals(DBNull.Value))

dt.Rows.Add(tZ.Text.ToString(), tIloscZ.Text.ToString());
dt.Rows.RemoveAt(0);

Tylko jak to ułożyć, żeby przeskanował mi całą tabelew poszukiwaniu wolnych pozycji?

Proszę o pomoc, Pozdrawiam

0

A wiesz co to sa petle? Jak nie wiesz i programujesz to powinni Ci taka na szyje zalozyc :P

Mozesz sprobowac jeszcze cos takiego
DataRows []rows = dt.Select("CatalogueNumber IS NULL");
foreach(DataRow row in rows)
dt.Rows.Remowe(row)

powinno byc szybsze, jednak nie jestem pewien filtra na 100%. Jesli faktycznie zwroci poprawna liczbe rows'ow to to powinno byc szybsze niz iteracja przez cala tabele.

Chyba, ze ktos zna jeszcze jakis inny ciekawy sposob? Moze zwykle ustawienie filtra w DataView na IS NOT NULL byloby najlepszym rozwiazaniem? Az jutro w pracy spradze :)

0

wasiu, pętle to sobie załóż na ego i się nie odzywaj, bo takimi postami śmietnik robisz :)

Poza tym rozpisz mi pętlę dla 35 textbox'ów,

Się przez te EDITy bałagan zrobił. Zaraz sprawdze to co napisałeś. Chociaż pomysł z dataViewem też wygląda ciekawie i powinien być szybszy
Pozdrawiam

btw - to jesto może moja 3 aplikacja pod C#

0

Hehe, za szybko postnela mi sie odpowiedz i Od razu wielkie uniesienie ;)
Spokojnie, reszta tez sie tam znalazla.

I jaki problem z petla dla 35 textbox'ow? Chyba nie tworzysz recznie textboxa dla kazdego wiersza? Bo wtedy faktycznie to moze byc problem. Stworz sobie schemat dla jednego wiersza, a pozniej w petli tworz kopie... tak samo przy zczytywaniu danych.

0

temat do zamknięcia.

Chłopak, który mi aktualizował pozycje i numery zamówieniowe w bazie danych w puste pole wpisał w część kolumn "-"....

wisiu, sory za uniesienie, ale straciłem nad tym bajzle ponad godzinę, a mam taki nawał projektów, że nie moge sobie pozwolić na takie straty

0

Sureal, sorki tez za drobny zarcik ale kiedys mialem taka sytuacje, ze programista wrzucic po prostu cos kolo 90ciu textbox'ow z reki na forme, a pozniej przyszly zmiany do tego i akurat ja bylem osoba, ktora zaczela bawic sie w bugfix'ing :P Naprawde mialem ochote go powiesic, bo drobna zmiana zajela w sumie tyle co stworzenie tego od nowa.

Dalej chyba najszybciej moze sie pustych wierszy z tabeli pozbyc uzywaja Select() i wpisujac odpowiednie filter expression, tylko trzeba tam teraz jeszcze dodac "AND CatalogueNumber = "-""

0

Temat byl już dawno, ale w wolnej chwili postanowiłem dodać ciekawe rozwiązanie, które może przydać się w przyszłości osobą z podobnym problemem.

Poniezej złączam kod do przykładowej klasy, sprawdzającej tabele przeznaczoną do filtrowania w poszukiwaniu duolikatów.

Kod klasy:

 public System.Data.DataTable RemoveDuplicateRows(System.Data.DataTable dTable, string colName)
        {
            Hashtable hTable = new Hashtable();
            ArrayList duplicateList = new ArrayList();
            foreach (DataRow drow in dTable.Rows)
            {
                if (hTable.Contains(drow[colName]))
                    duplicateList.Add(drow);
                else
                    hTable.Add(drow[colName], string.Empty);
            }
            foreach (DataRow dRow in duplicateList)
                dTable.Rows.Remove(dRow);
            return dTable;
        }

w nagłówku trzeba pamiętać o dodaniu:

using System.Collections;

Klasy używamy w następujący sposób:

dt = RemoveDuplicateRows(dt, "nazwa filtrowanej kolumnkolumny");
//dt - nazwa przeszukiwanego DataTable

Pozdrawiam

1 użytkowników online, w tym zalogowanych: 0, gości: 1