2009-08-08 4 views
1

Also probiere ich ein Konzept-Tool von mir aus, wo ich in der Lage bin, Daten aus einer Datenbank wirklich einfach zu lesen und zu schreiben. Ich habe das Formular so eingerichtet, wie ich es möchte, und um verschiedene Textfelder und Dropdown-Boxen herum verteilt, um die Daten aus der Datenbank zu lesen. Und ich habe alles, um zu arbeiten und alles, aber es gibt einen kleinen Fehler, den ich nicht ganz verstehe, warum es da ist. Einige Textfelder aktualisieren den Text nicht aus der Datenbank. Aber es scheint, als ob es nur auftritt, wenn die Daten in der Datenbank nichts sind. Der Wert aus der letzten Zeile hängt also immer noch in der Textbox. Wenn Sie also auf "Aktualisieren" klicken, wird der Wert aus dem Feld der letzten Zeile in die neue Zeile übernommen. Alles vermasseln.Die beste Art, den Fluss des Codes beim Lesen/Schreiben aus der Datenbank zu gestalten

Nun, was mich am meisten interessiert, ist der Scherfluss des Codes. Was ist der beste Weg, um den Code für all dies zu gestalten? Bisher habe ich habe dies:

Dies ist der Code, wenn sie in der Datagridview auf eine Zelle klicken:

Private Sub DataGridView_CellClick(ByVal sender As System.Object, ByVal e As System.Windows.Forms.DataGridViewCellEventArgs) Handles DataGridView.CellClick 

    On Error Resume Next 

    selectedName = Me.DataGridView.CurrentRow.Cells(0).Value 
    selectedGenre = Me.DataGridView.CurrentRow.Cells(1).Value 
    selectedRhytm = Me.DataGridView.CurrentRow.Cells(2).Value 
    selectedLength = Me.DataGridView.CurrentRow.Cells(3).Value 
    selectedFinished = Me.DataGridView.CurrentRow.Cells(4).Value 
    selectedSoundFile = Me.DataGridView.CurrentRow.Cells(5).Value 

    txtBoxName.Text = selectedName 
    txtBoxGenre.Text = selectedGenre 
    txtBoxRhytm.Text = selectedRhytm 
    txtBoxLength.Text = selectedLength 
    txtBoxFinished.Text = selectedFinished 
    txtBoxSoundFile.Text = selectedSoundFile 

End Sub 

Die „ausgewählte“ -Variablen sind alle in einem GlobalCode.vb ich erklärt‘ Ich habe, wo ich sie alle für den späteren Gebrauch erstellen. Sie sind wie folgt definiert:

Friend Module GlobalVariables 

    Friend selectedName As String = Nothing 
    Friend selectedGenre As String = Nothing 
    Friend selectedRhytm As String = Nothing 
    Friend selectedLength As String = Nothing 
    Friend selectedFinished As String = Nothing 
    Friend selectedSoundFile As String = Nothing 


End Module 

Ich habe so etwas noch nie wirklich getan. Ich bin eher ein Designer als ein Programmierer, aber ich muss wirklich ein Konzept ausprobieren, also bin ich mir nicht sicher, ob das überhaupt so ist. Ich habe festgestellt, dass es meistens funktioniert. Aber ich denke, erfahrene Programmierer haben eine Möglichkeit, das Layout des Codes so zu gestalten, dass es effizient, sauber und einfach zu lesen ist. Also, wie sieht das aus?

+0

re Ihren Kommentar - ich weiß nicht sehr viel über Adapter wissen, um ehrlich zu sein (ich benutze ORM, nicht DataSet). Vielleicht als eine andere spezifische Frage fragen? –

Antwort

2

(ich kann nichts Datenbank in der Frage, btw im Zusammenhang sehen)

Vielleicht der beste Weg ist, diesen Code zu legen ... nicht zu. Schreiben Sie keinen Code für Dinge, mit denen die Standard-Datenbindungs-Frameworks umgehen können. Zum Beispiel (es tut mir leid, es ist C#, aber es sollte übersetzen - alle "guten" Bits werden hier vom .NET-Framework zur Verfügung gestellt, nicht von der Sprache); einige Code UI - kein Code beachten Werte kopieren:

static class Program { 
    [STAThread] 
    static void Main() { 
     Application.EnableVisualStyles(); 
     // some sample data 
     BindingList<Track> tracks = new BindingList<Track>(); 
     tracks.Add(new Track { Name = "foo", Genre = "Rock", Rhythm = "insane", Length = 180 }); 
     tracks.Add(new Track { Name = "bar", Genre = "Classic", Rhythm = "sedate", Length = 240 }); 

     // show the data on a form 
     using (Form form = new Form { 
      Controls = { 
       new DataGridView { DataSource = tracks, Dock = DockStyle.Fill }, 
       new TextBox { DataBindings = {{"Text", tracks, "Name"}}, Dock = DockStyle.Bottom}, 
       new TextBox { DataBindings = {{"Text", tracks, "Genre"}}, Dock = DockStyle.Bottom}, 
       new TextBox { DataBindings = {{"Text", tracks, "Rhythm"}}, Dock = DockStyle.Bottom}, 
       new TextBox { DataBindings = {{"Text", tracks, "Length"}}, Dock = DockStyle.Bottom}, 
      } 
     }) { 
      Application.Run(form); 
     } 
    } 
} 

Mit Dateneinheit unterstützt:

class Track : INotifyPropertyChanged { 
    private string name, genre, rhythm; 
    private int length; 
    public event PropertyChangedEventHandler PropertyChanged; 
    private void SetField<T>(ref T field, T value, string propertyName) { 
     if (!EqualityComparer<T>.Default.Equals(field, value)) { 
      field = value; 
      PropertyChangedEventHandler handler = PropertyChanged; 
      if (handler != null) handler(this, new PropertyChangedEventArgs(propertyName)); 
     } 
    } 
    public string Name { get { return name; } set { SetField(ref name, value, "Name"); } } 
    public string Genre { get { return genre; } set { SetField(ref genre, value, "Genre"); } } 
    public string Rhythm { get { return rhythm; } set { SetField(ref rhythm, value, "Rhythm"); } } 
    public int Length { get { return length; } set { SetField(ref length, value, "Length"); } } 
} 
+0

Bester Tipp noch nicht! Wie du wahrscheinlich weißt, bin ich kein echter Programmierer. Das Questing war also wirklich verwandt mit - Wie man wirklich Daten bindet :) –

+0

Ich habe gerade versucht, die Werte der Textboxen an die Spalten in der Datenbank zu binden. Und es funktioniert gut, keine Bugs mehr :) Aber die Daten werden nicht gespeichert. Versucht, Folgendes einzufügen: DataSourceDataSet.Songs.AcceptChanges() SongsTableAdapter.Update (Me.DataSourceDataSet.Songs) Die Daten werden jedoch nicht in der Datenbank aktualisiert –

0

Versuchen Sie auskommen auf Fehler Resume Next für ein bisschen und sehen, was passiert. Ich habe es geschafft, mich öfter zu verwirren, als ich mit dieser Aussage rechnen kann.

EDIT

ich dies nur realisiert ist VB.Net. In diesem Fall sollten Sie niemals "Bei Fehler fortsetzen" verwenden. Verwenden Sie Try Catch Strukturen.

+0

Ok, ich werde das versuchen, um zu sehen, was passiert. Irgendeine Idee, wie man den Code zum Weitergehen bringt, wenn der Wert von den Zellen nichts ist? –

+0

Herausgefunden, das funktioniert super, danke! :) –

Verwandte Themen