ComboBox source a dataSet

0

Hej, oto przykład:
Dysponując komponentami dataSet, comboBox oraz plikiem xml wykonujemy instrukcje:

            dataSet1.ReadXml(path);
            comboBox1.DataSource = dataSet1.Tables[0];
            comboBox1.DisplayMember = "item";

Mamy pięknie zapełniony comboBox.

Problem:

Chcę dodawać do pobranej kolekcji nowe Itemy i nadpisać plik nową kolekcją.
Lecz nie można modyfikować kolekcji Items, kiedy ustawiona jest własność dataSource.
Jak to ugryźć?;p

0

DataSet to najprosciej zbior DataTable (+ relacje). Mozna dodawac do niego elementy, np. za pomoca
(DataTable).NewRow(). No ale to nie za pomoca Add.

Tak przynajmniej zrozumialem to co napisales, bo jest tam wiele zyczen, mysli, dywagacji ale jasno pytania postawionego nie ma.

Swoja droga, moze wystarczy tobie DataTable ( i ReadXml w nim) a nie caly DataSet ?

0

Metoda Add chcę operować na comboBoxie a nie DataSet'cie.
DataTable nie obsługuje czytania z pliku xml poprzez:

DataTable dt = new DataTable();
            dt.ReadXml(path);

Err:
"Element DataTable nie obsługuje wnioskowania schematu na podstawie danych Xml."

Więc chyba jedynym sposobem na rozwiązanie problemu jest operowanie na dataSet, a nie na comboBox.
Wiec dodałem tak:

DataRow row;
row = dataSet1.Tables[0].NewRow();

row["itemName"] = "item1";
row["itemPrice"] = "price1";

dataSet1.Tables[0].Rows.Add(row);
0

Na MSDN uzywa sie XML, moze za zlozony jest.

0
reichel napisał(a)

Na MSDN uzywa sie XML, moze za zlozony jest.

<?xml version="1.0" standalone="yes"?>
<catalog>
  <item>
    <itemName>name1</itemName>
    <itemPrice>10</itemPrice>
  </item>
  <item>
    <itemName>name2</itemName>
    <itemPrice>20</itemPrice>
  </item>
  <item>
    <itemName>name3</itemName>
    <itemPrice>30</itemPrice>
  </item>
</catalog>

Metoda XmlRead z klasy DataSet sprawdza sie dla tego pliku.
Btw, bawet wskazane by dla mnie było uzywanie DataSet, ponieważ pliki będą 3 i 3 komponenty powiązane z DataSet.
Wiec póki co, część problemu rozwiązana.
Zastanawiam się jak pobierać dane za pomocą metody ReadXml dla 3 róznych plików, aby dane trafiły do 3 róznych tabel z zestawu dataSet.

Pzdr

0

Dla przykładu:

dataSet1.ReadXml(path);
comboBox1.DataSource = dataSet1.Tables[0];
comboBox1.DisplayMember = "item";

//ładowanie danych z pliku path1 do tabeli Table[1] w dataSet1
comboBox2.DataSource = dataSet1.Tables[1];
comboBox2.DisplayMember = "item";

//ładowanie danych z pliku path2 do tabeli Table[2] w dataSet1
comboBox3.DataSource = dataSet1.Tables[2];
comboBox3.DisplayMember = "item";

Nie wiem jak pogodzić 3 pliki w 1 dataSet.

0

Mozna tak

           string www = Resource1.String1; //to ten XML co podales
                        
            DataTable dt = new DataTable();
            dt.TableName = "item";
            dt.ReadXmlSchema(new System.IO.StringReader(www)); //nie optymalne ... test
            dt.ReadXml(new System.IO.StringReader(www));

            comboBox1.DisplayMember = "itemName";
            comboBox1.DataSource = dt;
            /*
               i wtedy mozna sie dorwac do poszczegolnych
                DataSet ds = new DataSet();
                i tu datatable natworzyc
               mozna tez kombinowac ze schematem xsd ... 
            */
0
string path = @"C:\Documents and Settings\Jacek\Pulpit\icons\sample.xml";

            DataTable dt = new DataTable();
            dt.TableName = "item";
            dt.ReadXmlSchema(path);
            dt.ReadXml(path);
            comboBox1.DataSource = dt;
            comboBox1.DisplayMember = "itemPath";

oka, działa, tylko mam pytanie.
Czemu przy czytaniu pliku xml do komponentu dataSet wystarczys ama metoda ReadXml() a do wczytywania do DataTable potrzeba ją poprzedzić ReadXmlSchema()?

0

Bo wyglada na to, ze niedostepny jest parametr XmlReadMode, dostepny dla DataSet (w funkcji ReadXml). Co prawda w helpie pisza aby stosowac funkcje z tym parametrem ale jest ona internal ...

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