Announcement

Collapse
No announcement yet.

DataView definieren

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • DataView definieren

    Hallo,

    ich habe eine Tabelle an ein dataGrid gebunden.
    Nun möchte ich aber bei einem Click auf einen ausgewählten Datensatz diesen Satz in einer neuen Form zum bearbeiten anzeigen.
    Ich habe hier schon gelesen, das man das mit einem DataView und dem CurrencyManager machen muss.
    Doch das klappt bei mir nicht, da ich die "Sache" mit dem DataView nicht richtig hinbekomme. Zur Zeit ist das so:

    // Dataset erzeugen und mit Daten füllen
    DataSet ds = new DataSet();
    kunden.Fill(ds,"Kunden");
    // DataView
    DataView vknr = new DataView(ds.Tables["Kunden"]);
    //Sortierung
    vknr.Sort = "NAME";
    //Filter
    // vknr.Rowfilter = "NAME LIKE ='textbox1.text'";
    for (int i =0; i<vknr.Count;i++)
    { Verwirrung ;-))}

    // dataGrid anbinden
    dataGrid1.DataSource = ds.Tables["Kunden"];

    Wie geht es dann weiter? Speziell auch die Anbindung an den CurrencyManager?Da sehe ich halt nicht weiter. ;-((
    Kann mir bitte jemand helfen?

    Gruß
    Peter

  • #2
    Hallo,
    wenn die <i>DataView</i>-Komponente im Properties-Editor mit dem DataSet verbunden wird (Eigenschaft <b>Table</b> auf <i>dataSetName.DataTablename</i> setzen) und das DataGrid über die Eigenschaft <b>DataSource</b> mit dem DataView verbunden wird, liefert der folgende Zugriff eine <b>DataRow</b>-Instanz für den zur Zeit im DataGrid aktuell ausgewählten Datensatz zurück:
    <code>
    System.Data.DataRow aDR = dataViewAbos[dataGridAbos.CurrentRowIndex].Row;
    int iAutorAboID = (int)aDR[0];
    string sMagazin = (string)aDR[1];
    string sMsg = String.Format("{0} - {1}", iAutorAboID, sMagazin);
    </code>
    Über <b>CurrentRowIndex</b> ist der für das DataGrid zuständige CurrencyManager automatisch im Spiel.

    Mit der späteren Zuweisung <i>dataGrid1.DataSource = ds.Tables["Kunden"]; </i> wird das DataView wieder aus dem Spiel genommen, so dass die DataSource-Zuweisung nur ganz am Anfang vorgenommen werden darf.
    <br>
    Alternativ kann das 1. Formular die CurrencyManager-Instanz an das 2. Formular übergeben, damit dieses einen Verweis für den aktuellen Datensatz eintauschen kann. Das sieht zum Beispiel so aus:
    <br>
    Aufruf im Hauptformular:

    <code><b>private</b> <b>void</b> button3_Click(<b>object</b> sender, System.EventArgs e)
    {
    Form2 aFrm2 = <b>new</b> Form2();
    CurrencyManager aCM;
    aCM = (CurrencyManager)BindingContext[dataSet11, <font color="#9933cc">&quot;Customers&quot;</font>];
    aFrm2.DoEditData(aCM);
    } </code>
    Implementierung im 2. Formular:
    <code><b>public</b> <b>void</b> DoEditData(CurrencyManager aCM)
    {
    DataRowView aDRV = aCM.Current <b>as</b> DataRowView;
    DataView aDV = aDRV.DataView;
    <b>this</b>.BindingContext[aDV].Position = aCM.Position;
    textBox1.DataBindings.Add(<font color="#9933cc">&quot;Text&quot;</font>, aDV, <font color="#9933cc">&quot;CustomerID&quot;</font>);
    textBox2.DataBindings.Add(<font color="#9933cc">&quot;Text&quot;</font>, aDV, <font color="#9933cc">&quot;CompanyName&quot;</font>);
    <b>if</b> (<b>this</b>.ShowDialog() == DialogResult.OK)
    aCM.EndCurrentEdit();
    <b>else</b>
    aCM.CancelCurrentEdit();
    } </code&gt

    Comment

    Working...
    X