Konvertieren Sie ein dataGridView-Spalte zu checkbox-Spalte
Ich bin ein Programm zu machen, um zu überprüfen, wie viele Kurse ich habe in meinem linken univercity.
Ich lade Informationen aus einer csv
legen es die Daten in ein dataset und das display mit einem datagrid.
Möchte ich einige Spalten(Labor und Theorie), um das Kontrollkästchen Zellen ein, so dass ich überprüfen kann, die Kurse, die ich bestanden, und dann speichern Sie Sie zurück in die csv
laden Sie Sie später wieder (wenn ich den pass somethnig :P).
Aber ich habe ein problem Konvertierung von denen (string) Spalten Checkboxen, wie ich bin nicht so erfahren in c#
Das ist mein code :
string delimiter = ";";
string tablename = "paTable";
filename = "aname";
DataSet dataset = new DataSet();
StreamReader sr = new StreamReader(filename);
DataGridViewColumn column = new DataGridViewColumn();
dataset.Tables.Add(tablename);
dataset.Tables[tablename].Columns.Add("A/A");
dataset.Tables[tablename].Columns.Add("Course");
dataset.Tables[tablename].Columns.Add("Semester");
dataset.Tables[tablename].Columns.Add("Theory");
dataset.Tables[tablename].Columns.Add("Lab");
dataset.Tables[tablename].Columns.Add("Passed");
string alldata = sr.ReadLine();
while (sr.Peek() != -1)
{
alldata = sr.ReadLine();
string[] rows;
rows = alldata.Split("\r".ToCharArray());
foreach (string r in rows)
{
string[] items = r.Split(delimiter.ToCharArray());
dataset.Tables[tablename].Rows.Add(items);
}
this.dataGridView1.DataSource = dataset.Tables[0].DefaultView;
}
Jede mögliche Hilfe würde geschätzt !
- Side note, Sie werden wollen
using (var sr = new StreamReader) { /* read fron stream */ }
oder sich daran zu erinnern zu nennen, dieDispose ()
Methode, um richtig gehen zu lassen dieStreamReader
Instanz finden Sie unter "IDisposable". - Ich benutze den sr.Schließen().
Du musst angemeldet sein, um einen Kommentar abzugeben.
Wenn Sie manuell erstellt und Hinzugefügt die Spalten zu Ihrer
DataGridView
ich denke, Sie könnte halten Sie IhreDataSet
-loading, wie Sie ist.Ausschalten
AutoGenerateColumns
und fügen Sie Sie manuell:Der grid-Ansicht bevölkern soll, nachdem Sie binden ihn mit Ihrem
DataView
wie du tust:BEARBEITEN
Weil Sie sich auf starke Typen und der richtigen Bindung, eine vielleicht bessere alternative wäre, erstellen Sie eine Klasse zur Darstellung eines CSV-Datensatzes (Arten angenommen). Wenn diese Klasse implementiert die
INotifyPropertyChanged
- Schnittstelle können die Werte bearbeitet werden, die in derDataGridView
und spiegelt sich in der Klasse mit minimalem Aufwand.Die CSV-Datei selbst kann dargestellt werden durch eine Klasse:
Dem DataGridView können dann gebunden werden, um die
Rows
Eigenschaft einesCsvDataSource
Instanz, so dass sich die form der code kann wie folgt Aussehen:Natürlich würden Sie über eine Taste zum aufrufen der
SaveCsv
Methode, und Sie wollen eine andere Schaltfläche hinzufügen/entfernen von Zeilen zu/von Ihrem DataGridView. Auch Sie wollen den wrap Datei-I/O-Operationen in einem try/cath-block.Dies ist ein schnell summiert-up-Implementierung, erfordert ein wenig zusätzliche Arbeit, um voll funktionsfähig sein, aber es gibt eine Idee, und funktioniert out of the box.
Diese Weise "definieren von Spalten" - Teil ist völlig erledigt in der
CsvDataRow
- Klasse, die einen starken Typ, für jeden Datensatz. KeineDataSet
keineDataColumn
keineDataGridViewColumn
entweder. Nur die Daten, und einige Daten verbindlich.AutoGenerateColumns
es zeigt leere ZellenINotifyPropertyChanged
. Beachten Sie, dass diese alternative Lösung ist die Verwendung der Vanille DataGridView, mit AutoGenerateColumns auf True gesetzt.SaveCsv
🙂 ich kann Ihnen nicht genug danken für Ihre Hilfe.LoadCsv
gebe ich dann den Pfad der Datei, richtig ?LoadCsv("c:/file/something.csv");
?LoadCsv(@"C:\File\Something.csv");
, wo@
macht den string "literal", so dass Sie nicht haben, um sorgen über die backslashes werden interpreited als escape-Sequenzen durch den compiler. Ich würde empfehlen, nicht hard-codieren der Datei/Pfad diese Weise, obwohl; machen Sie es eine variable und übergeben der variable an die Methode.CsvDataSource
Instanz (übergeben Sie Ihre Trennzeichen) und rufen Sie seineLoadCsv
Methode (übergabe in Ihrem string filename). Dann übergeben Sie dieCsvDataSource
Instanz des FormularsLoadCsv
Methode (vielleicht benennen Sie das Formular Methode, umLoadCsvDataSource
). Wenn Sie die form danach, sollte man die csv-Daten in Ihrem Netz 🙂Können Sie "konvertieren" ein textboxcolumn einer checkbox wie diese:
Benötigen Sie eine DataGridViewCheckBoxColumn:
So müssen Sie ersetzen die
mit der DataGridViewCheckBoxColumn. Haben, Lesen Sie unten:
http://msdn.microsoft.com/en-us/library/system.windows.forms.datagridviewcheckboxcolumn.aspx
DataGridViewCheckBoxColumn
, undcolumn
ist nicht im geposteten code.DataGridViewCheckBoxColumn
wenn Sie möchten fügen Sie es zu IhremDataGridView
, im Gegensatz zu verlassen Sie die Spaltendefinitionen in die Hände IhrerDataSet
. Auch, wenn ich mich richtig erinnere, wenn das dataset definiert eine Spalte alsbool
es wird zeigen, wie ein checkbox-Spalte.bool
aber mit dem Prozess, den ich zum laden der csv-Inhalt zu dem Datensatz kann ich nicht machen, das "Lab" oder "Theorie" Spalten alsbool
.