PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : (C#) - Fragen / Lern Thread



darkness
07.09.2016, 19:57
Hi,

In diesem Thread werde ich meine Fragen zu C# stellen. Wenn ihr wollt könnt ihr mir beim lösen der Probleme helfen. :)

1.) Daten speichern in C# (Lösung: DoriDB*)
2.) Buttons zur Datagridview hinzufügen

Ich möchte gerne mehrere Buttons zu einer Datagridview hinzufügen.

Ich habe die Spalten Host, Username, Password, SFT, Type & Actions

Ich möchte jetzt zu jeder Reihe in Actions Buttons hinzufügen (edit, delete)

Hab natürlich schon google bemüht aber irgendwie kam dabei nichts passendes raus.

Code


DataGridViewButtonColumn buttonColumn = new DataGridViewButtonColumn();
buttonColumn.HeaderText = "";
buttonColumn.Name = "Delete";
buttonColumn.Text = "Delete";
buttonColumn.UseColumnTextForButtonValue = false;



row["Actions"] = buttonColumn;


Das sieht dann aber so aus.

Silentkill
07.09.2016, 20:10
Ich nutze recht gerne SQLite Datenbanken in Verbindung mit System.Data.SQLite.

darkness
07.09.2016, 20:11
Kennst du ein gutes Tutorial dazu? Wie ich die Datenbank installiere und so?

Silentkill
07.09.2016, 20:15
Habe die beiden hier damals genutzt um den Grundaufbau zu verstehen:
Getting started with SQLite in C# ? Tigran's Blog (http://blog.tigrangasparian.com/2012/02/09/getting-started-with-sqlite-in-c-part-one/)
C# und SQLite – Eine kleine Einführung | Thomas Belsers Homepage (http://thomasbelser.net/2009/01/25/c-sharp-und-sqlite-eine-kleine-einfuhrung/)

Wie man Querys erstellt wirst du sicherlich wissen..

Hier noch eine sehr gute Tutorialreihe auf Youtube (zu C# allgemein, nicht SQLite)
https://www.youtube.com/playlist?list=PL0EE421AE8BCEBA4A

BASF
08.09.2016, 01:57
Hi,

https://www.youtube.com/watch?v=9Pbg-XFqqfA


C# am besten Daten verwaltet ...
wenn es das ist was du erfragen willst ... deine Fragestellung find ich etwas schwammig ;P

Silentkill
09.09.2016, 12:19
Ich möchte jetzt zu jeder Reihe in Actions Buttons hinzufügen (edit, delete)



{
DataGridViewButtonColumn btn = new DataGridViewButtonColumn();
dataGridView1.Columns.Add(btn);

btn.HeaderText = "Actions";
btn.Text = "delete";
btn.Name = "btnDelete";
btn.UseColumnTextForButtonValue = true; //(wahlweise)
}

Wobei sich für deinen Zweck ein BindingNavigator besser eignen würde. Dann brauchst du garkeine Buttons einfügen sondern hast einfach einen Edit und einen Speicher Button, der für das ganze Grid gilt.
Gruß

darkness
09.09.2016, 13:43
Danke.


DataTable table = new DataTable();

table.Columns.Add("Host");
table.Columns.Add("Username");
table.Columns.Add("Password");
table.Columns.Add("SFTP");

DataGridView grid = new DataGridView();
grid.AutoSizeColumnsMode = DataGridViewAutoSizeColumnsMode.Fill;
grid.Dock = DockStyle.Fill;

DataGridViewButtonColumn btn = new DataGridViewButtonColumn();
grid.Columns.Add(btn);

btn.HeaderText = "Actions";
btn.Text = "delete";
btn.Name = "btnDelete";
btn.UseColumnTextForButtonValue = true; //(wahlweise)

Das "Problem" ist das der Button jetzt am Anfang der "Tabelle" ist. Ich hätte die Buttons aber gerne am Ende also rechts.

Silentkill
09.09.2016, 13:56
Zuerst das DataTable einfügen und erst danach die Buttons hinzufügen.


{
DataTable table = new DataTable();

table.Columns.Add("Host");
table.Columns.Add("Username");
table.Columns.Add("Password");
table.Columns.Add("SFTP");

DataGridView grid = new DataGridView();
grid.AutoSizeColumnsMode = DataGridViewAutoSizeColumnsMode.Fill;
grid.Dock = DockStyle.Fill;

grid.DataSource = table;

DataGridViewButtonColumn btn = new DataGridViewButtonColumn();
grid.Columns.Add(btn);

btn.HeaderText = "Actions";
btn.Text = "delete";
btn.Name = "btnDelete";
btn.UseColumnTextForButtonValue = true; //(wahlweise)
}

darkness
09.09.2016, 14:22
Danke. Aber der Button ist immer noch am Anfang ...

Btw. Die Rows sind bearbeitbar (ohne speichern) kann man das irgendwie verhindern?

Silentkill
09.09.2016, 14:56
Geht bei mir bestens, keine Ahnung was du anders machst.


kann man das irgendwie verhindern?
Ja: dataGridView.ReadOnly = true;

darkness
09.09.2016, 19:15
Komisch. Hier mal der komplette Code.


private void redrawServerManagerDataTable()
{

DataTable table = new DataTable();

table.Columns.Add("Host");
table.Columns.Add("Username");
table.Columns.Add("Password");
table.Columns.Add("SFTP");

DataGridView grid = new DataGridView();
grid.AutoSizeColumnsMode = DataGridViewAutoSizeColumnsMode.Fill;
grid.Dock = DockStyle.Fill;
grid.ReadOnly = true;

grid.DataSource = table;

DataGridViewButtonColumn btn = new DataGridViewButtonColumn();
grid.Columns.Add(btn);

btn.HeaderText = "Actions";
btn.Text = "delete";
btn.Name = "btnDelete";
btn.UseColumnTextForButtonValue = true; //(wahlweise)

string path = "{0}";
path = String.Format(path, AppDomain.CurrentDomain.BaseDirectory + "database\\");
DoriDB db = new DoriDB();
db.setDatabasesStorageDirectory(path);
db.openDatabase("uploadmonkey");
db.setTable("servers");

string[] servers = db.getBlobs("server_*.blob");
foreach (string server in servers)
{

try
{

string buffer = System.IO.File.ReadAllText(server);
dynamic data = JsonConvert.DeserializeObject(buffer);

DataRow row = table.NewRow();

row["Host"] = (string)data.host;
row["Username"] = (string)data.username;
row["Password"] = (string)data.password;
/*
DataGridViewButtonColumn buttonColumn = new DataGridViewButtonColumn();
buttonColumn.HeaderText = "";
buttonColumn.Name = "Delete";
buttonColumn.Text = "Delete";
buttonColumn.UseColumnTextForButtonValue = false;



row["Actions"] = buttonColumn;
*/

if ((int)data.sftp == 1)
{
row["SFTP"] = "yes";
}
else
{
row["SFTP"] = "no";
}

table.Rows.Add(row);

}
catch (Newtonsoft.Json.JsonException e)
{

}

}

this.Controls.Add(grid);


}