2009-06-02 6 views
0

Ich versuche, eine einfache Winforms-App für Compact Framework zu schreiben. Das Hauptformular enthält ein DataGrid, das an eine DataTable gebunden ist (mit Daten aus einer XML-Datei). Ich möchte ein anderes Formular aufrufen, das die Details des aktuellen Datensatzes anzeigt. Ich habe so etwas wie den folgenden Code als Konstruktor für das Detailformular.Gemeinsame Nutzung einer DataTable über mehrere Formulare in Winforms

public DetailsForm(DataTable dtLandlords, int Index) //the constructor 
{ 
    InitializeComponent(); 
    lLandlordCode.DataBindings.Add("Text", dtLandlords, "LandlordID"); 
    ....... 
} 

Ich rufe den Konstruktor mit dem folgenden Code

Form frm = new LandlordDetailsForm(dtLandlords, dataGrid1.CurrentRowIndex); 
    frm.Show(); 

Wie bekomme ich es den aktuellen Datensatz angezeigt werden (im Index angegeben - momentan nicht verwendet) und nicht nur den ersten Datensatz. Oder gibt es einen besseren Weg, dass ich das tun sollte?

Antwort

1

Databindings "binden" an eine bereitgestellte "Ansicht", derzeit sind Sie an die DataTable gebunden, ohne die Standardansicht festzulegen (also wird standardmäßig die vollständige Tabelle angezeigt). Z.B. dtLandlords.DefaultView.RowFilter = "LandlordID = TheIdYouWant";

Die andere Möglichkeit ist, das DataGrid/GridView selbst zu den DataBingings hinzuzufügen, die eine Standardansicht mit dem aktuell ausgewählten Element bereitstellen.

Edit: Hinzugefügt Beispiel

Ein Beispiel hierfür zu einem Datagridview-Bindung ist: Zuerst ein Formular mit einem Textfeld und Datagridview (Standardnamen) erstellen. Dann fügen Sie diesen Code in den Konstruktor des Formulars ein.

DataTable dt = new DataTable(); 
dt.Columns.Add("Col1"); 
dt.Columns.Add("Col2"); 
DataRow dr; 
dr = dt.NewRow(); 
dr[0] = "C1R1"; 
dr[1] = "C2R1"; 
dt.Rows.Add(dr); 
dr = dt.NewRow(); 
dr[0] = "C1R2"; 
dr[1] = "C2R2"; 
dt.Rows.Add(dr); 
dr = dt.NewRow(); 
dr[0] = "C1R3"; 
dr[1] = "C2R3"; 
dt.Rows.Add(dr); 

this.dataGridView1.DataSource = dt; 
this.textBox1.DataBindings.Add("Text", dataGridView1.DataSource, "Col1"); 

Dann laufen, und wählen Sie Elemente in der Gridview und die TextBox automatisch mit den ausgewählten Details aktualisiert werden soll. Hinweis: Ich habe hier ein DataGridView verwendet, ich nehme an, es funktioniert auch für DataGrids (die ich glaube, dass Sie verwenden)

+0

Ihr erster Vorschlag funktioniert, danke. Ich möchte jedoch mehr über Ihre zweiten Vorschläge zum Hinzufügen des DataGrid zu den DataBindings wissen. – Alister

+0

Ich habe die Hauptantwort mit einem Beispiel dafür bearbeitet. Wenn dies die akzeptierte Antwort war, können Sie sie als solche markieren? Ich glaube, durch Klicken auf das Häkchen unter der Antwort Bewertung, Prost. – Tetraneutron