Ich schreibe ein kleines Projekt mit einer einfachen XML-Datenbank, Mein C# -Niveau ist niedrig, während ich lerne, während ich codiere.VS2015 C# -> Füllen von Textboxen mit Xml-Datenbank und Listbox
Ein Teil meines Projektes besteht eine Benutzerdatenbank mit dem Namen des Habens, Vorname, Login, Passwort, ...
Ich bin eine XML-Datenbank:
<?xml version="1.0" standalone="yes"?>
<DocumentElement>
<Personnel>
<id>1</id>
<nom>John</nom>
<prenom>Doe</prenom>
<accelvl>1</accelvl>
<couleur>white</couleur>
<login>john.d</login>
<pass>123</pass>
</Personnel>
<Personnel>
<id>2</id>
<nom>Martha</nom>
<prenom>Blue</prenom>
<accelvl>5</accelvl>
<couleur>orange</couleur>
<login>martha.b</login>
<pass>123</pass>
</Personnel>
Ich benutze diesen Code der Datenbank
public frm_Admin()
{
InitializeComponent();
CreerDGV_P();
GetData_P();
CreerDataTable_P();
}
private void frm_Admin_Load(object sender, EventArgs e)
{
ListGP();
}
BindingList<Data_P> list_P;
internal class Data_P
{
public int Id { get; set; }
public string Nom { get; set; }
public string Prénom { get; set; }
public int AccesLvl { get; set; }
public string Couleur { get; set; }
public string Login { get; set; }
public string Pass { get; set; }
}
public void GetData_P() //from xml
{
DataTable dt = CreerDataTable_P();
dt.ReadXml(@"testbase.xml");
foreach (DataRow dr in dt.Rows)
list_P.Add(new Data_P
{
Id = Convert.ToInt32(dr[0]),
Nom = dr[1].ToString(),
Prénom = dr[2].ToString(),
AccesLvl = Convert.ToInt32(dr[3]),
Couleur = dr[4].ToString(),
Login = dr[5].ToString(),
Pass = dr[6].ToString()
});
}
private DataTable CreerDataTable_P()
{
DataTable dt = new DataTable("Personnel");
dt.Columns.Add("id", typeof(int));
dt.Columns.Add("nom", typeof(string));
dt.Columns.Add("prenom", typeof(string));
dt.Columns.Add("accelvl", typeof(string));
dt.Columns.Add("couleur", typeof(string));
dt.Columns.Add("login", typeof(string));
dt.Columns.Add("pass", typeof(string));
for (int i = 0; i < dataGridView_P.Rows.Count; i++)
dt.Rows.Add
(
dataGridView_P[0, i].Value.ToString(),
dataGridView_P[1, i].Value.ToString(),
dataGridView_P[2, i].Value.ToString(),
dataGridView_P[3, i].Value.ToString(),
dataGridView_P[4, i].Value.ToString(),
dataGridView_P[5, i].Value.ToString(),
dataGridView_P[6, i].Value.ToString()
);
dt.AcceptChanges();
return dt;
}
private void CreerDGV_P()
{
list_P = new BindingList<Data_P>();
dataGridView_P.DataSource = list_P;
dataGridView_P.AllowUserToAddRows = false;
dataGridView_P.CellEndEdit += new DataGridViewCellEventHandler(dataGridView_P_CellEndEdit);
}
private void dataGridView_P_CellEndEdit(object sender, DataGridViewCellEventArgs e)
{
list_P[e.RowIndex].Nom = dataGridView_P[1, e.RowIndex].Value.ToString();
}
private void button_new_bddp_Click(object sender, EventArgs e)
{
list_P.Add(new Data_P { Id = list_P.Count + 1, Nom = "" });
}
private void button_save_bddp_Click(object sender, EventArgs e)
{
DataTable dt = CreerDataTable_P();
dt.WriteXml(@"testbase.xml");
;
}
void ListGP()
{
this.listBox_GP_Fichiers.Items.Clear(); // j'efface le contenu pour mettre à jour et éviter les doublons
listBox_GP_Fichiers.Text = "";
this.listBox_LogC.Items.Clear();
listBox_LogC.Text = "";
DataTable dt = new DataTable("Personnel");
dt.Columns.Add("id", typeof(int));
dt.Columns.Add("nom", typeof(string));
dt.Columns.Add("prenom", typeof(string));
for (int i = 0; i < dataGridView_P.Rows.Count; i++)
dt.Rows.Add(listBox_GP_Fichiers.Items.Add(dataGridView_P[1, i].Value.ToString() + " " + dataGridView_P[2, i].Value.ToString()));
for (int i2 = 0; i2 < dataGridView_P.Rows.Count; i2++)
dt.Rows.Add(listBox_LogC.Items.Add(dataGridView_P[1, i2].Value.ToString() + " " + dataGridView_P[2, i2].Value.ToString()));
dt.AcceptChanges();
return;
}
ich habe eine Datagridview in einer Form und in einer anderen Form zu binden ich habe ein Listenfeld mit Namen + Vornamen und texboxes
this is how the page looks like Jetzt möchte ich Textfelder mit allen Daten der ausgewählten Person füllen, aber funktioniert nicht, wenn ich einen Namen aus der Listbox wähle, wird nur der erste Eintrag der Datenbank in Textfeldern angezeigt, hier ist der Code, den ich verwendet:
private void listBox_GP_Fichiers_SelectedIndexChanged(object sender, EventArgs e)
{
if (listBox_GP_Fichiers.SelectedItems.Count != 0)
{
string s = "";
DataTable dt = new DataTable("Personnel");
dt.Columns.Add("id", typeof(int));
dt.Columns.Add("nom", typeof(string));
dt.Columns.Add("prenom", typeof(string));
dt.Columns.Add("accelvl", typeof(string));
dt.Columns.Add("couleur", typeof(string));
dt.Columns.Add("login", typeof(string));
dt.Columns.Add("pass", typeof(string));
for (int x = 0; x <= listBox_GP_Fichiers.SelectedItems.Count - 1; x++)
{
s = listBox_GP_Fichiers.SelectedItems[x].ToString();
if (s.Equals(dataGridView_P[1, x].Value.ToString() + " " + dataGridView_P[2, x].Value.ToString()))
{
Var.GP_Id = dataGridView_P[0, x].Value.ToString();
Var.GP_Nom = dataGridView_P[1, x].Value.ToString();
Var.GP_Prénom = dataGridView_P[2, x].Value.ToString();
Var.GP_Access_Level = dataGridView_P[3, x].Value.ToString();
Var.GP_Color = dataGridView_P[4, x].Value.ToString();
Var.GP_Login = dataGridView_P[5, x].Value.ToString();
Var.GP_MDP = dataGridView_P[6, x].Value.ToString();
}
dt.AcceptChanges();
textBox_GP_Nom.Text = Var.GP_Nom;
textBox_GP_Prénom.Text = Var.GP_Prénom;
textBox_GP_Login.Text = Var.GP_Login;
textBox_GP_MDP.Text = Var.GP_MDP;
}
}
}
I severals sucht meine Frage versucht, aber kann nichts finden, dass
Dank
bearbeiten funktioniert für mich:
Var.cs so aussehen
public class Var
{
//Gestion du personnel
public static string GP_Path, GD_Path, GPQ_Path, GP_List_TS;
public static string GP_Nom, GP_Prénom, GP_Login, GP_MDP, GP_Access_Level, GP_Color;
public static string GP_Id;
}
es neu zu erstellen, hier unten:
form1.cs
using System;
using System.ComponentModel;
using System.Data;
using System.Windows.Forms;
namespace TestApp
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
CreerDGV_P();
GetData_P();
CreerDataTable_P();
}
private void Form1_Load(object sender, EventArgs e)
{
ListGP();
}
BindingList<Data_P> list_P;
internal class Data_P
{
public int Id { get; set; }
public string Nom { get; set; }
public string Prénom { get; set; }
public int AccesLvl { get; set; }
public string Couleur { get; set; }
public string Login { get; set; }
public string Pass { get; set; }
}
public void GetData_P() //from xml
{
DataTable dt = CreerDataTable_P();
dt.ReadXml(@"testbase.xml");
foreach (DataRow dr in dt.Rows)
list_P.Add(new Data_P
{
Id = Convert.ToInt32(dr[0]),
Nom = dr[1].ToString(),
Prénom = dr[2].ToString(),
AccesLvl = Convert.ToInt32(dr[3]),
Couleur = dr[4].ToString(),
Login = dr[5].ToString(),
Pass = dr[6].ToString()
});
}
private DataTable CreerDataTable_P()
{
DataTable dt = new DataTable("Personnel");
dt.Columns.Add("id", typeof(int));
dt.Columns.Add("nom", typeof(string));
dt.Columns.Add("prenom", typeof(string));
dt.Columns.Add("accelvl", typeof(string));
dt.Columns.Add("couleur", typeof(string));
dt.Columns.Add("login", typeof(string));
dt.Columns.Add("pass", typeof(string));
for (int i = 0; i < dataGridView_P.Rows.Count; i++)
dt.Rows.Add
(
dataGridView_P[0, i].Value.ToString(),
dataGridView_P[1, i].Value.ToString(),
dataGridView_P[2, i].Value.ToString(),
dataGridView_P[3, i].Value.ToString(),
dataGridView_P[4, i].Value.ToString(),
dataGridView_P[5, i].Value.ToString(),
dataGridView_P[6, i].Value.ToString()
);
dt.AcceptChanges();
return dt;
}
private void CreerDGV_P()
{
list_P = new BindingList<Data_P>();
dataGridView_P.DataSource = list_P;
dataGridView_P.AllowUserToAddRows = false;
dataGridView_P.CellEndEdit += new DataGridViewCellEventHandler(dataGridView_P_CellEndEdit);
}
private void dataGridView_P_CellEndEdit(object sender, DataGridViewCellEventArgs e)
{
list_P[e.RowIndex].Nom = dataGridView_P[1, e.RowIndex].Value.ToString();
}
void ListGP()
{
this.listBox_GP_Fichiers.Items.Clear(); // j'efface le contenu pour mettre à jour et éviter les doublons
listBox_GP_Fichiers.Text = "";
DataTable dt = new DataTable("Personnel");
dt.Columns.Add("id", typeof(int));
dt.Columns.Add("nom", typeof(string));
dt.Columns.Add("prenom", typeof(string));
for (int i = 0; i < dataGridView_P.Rows.Count; i++)
dt.Rows.Add(listBox_GP_Fichiers.Items.Add(dataGridView_P[1, i].Value.ToString() + " " + dataGridView_P[2, i].Value.ToString()));
dt.AcceptChanges();
return;
}
private void listBox_GP_Fichiers_SelectedIndexChanged(object sender, EventArgs e)
{
if (listBox_GP_Fichiers.SelectedItems.Count != 0)
{
string s = "";
DataTable dt = new DataTable("Personnel");
dt.Columns.Add("id", typeof(int));
dt.Columns.Add("nom", typeof(string));
dt.Columns.Add("prenom", typeof(string));
dt.Columns.Add("accelvl", typeof(string));
dt.Columns.Add("couleur", typeof(string));
dt.Columns.Add("login", typeof(string));
dt.Columns.Add("pass", typeof(string));
for (int x = 0; x <= listBox_GP_Fichiers.SelectedItems.Count - 1; x++)
{
s = listBox_GP_Fichiers.SelectedItems[x].ToString();
if (s.Equals(dataGridView_P[1, x].Value.ToString() + " " + dataGridView_P[2, x].Value.ToString()))
{
Var.GP_Id = dataGridView_P[0, x].Value.ToString();
Var.GP_Nom = dataGridView_P[1, x].Value.ToString();
Var.GP_Prénom = dataGridView_P[2, x].Value.ToString();
Var.GP_Access_Level = dataGridView_P[3, x].Value.ToString();
Var.GP_Color = dataGridView_P[4, x].Value.ToString();
Var.GP_Login = dataGridView_P[5, x].Value.ToString();
Var.GP_MDP = dataGridView_P[6, x].Value.ToString();
}
dt.AcceptChanges();
textBox_GP_Nom.Text = Var.GP_Nom;
textBox_GP_Prénom.Text = Var.GP_Prénom;
textBox_GP_Login.Text = Var.GP_Login;
textBox_GP_MDP.Text = Var.GP_MDP;
}
}
}
private void button_new_bddp_Click(object sender, EventArgs e)
{
list_P.Add(new Data_P { Id = list_P.Count + 1, Nom = "" });
}
private void button_save_bddp_Click(object sender, EventArgs e)
{
DataTable dt = CreerDataTable_P();
dt.WriteXml(@"testbase.xml");
;
ListGP();
}
}
}
Var.cs
namespace TestApp
{
public class Var
{
//Gestion du personnel
public static string GP_Path, GD_Path, GPQ_Path, GP_List_TS;
public static string GP_Nom, GP_Prénom, GP_Login, GP_MDP, GP_Access_Level, GP_Color;
public static string GP_Id;
}
}
und endlich der Screenshot :
Was ist 'Var'? Wie ist definiert? – weirdgyn
Ich verwende eine separate Klasse: öffentliche statische Zeichenfolge GP_Nom, GP_Prenom, GP_Login, GP_MDP, GP_Access_Level; – Sidav
ok ... klingt ziemlich seltsam: 1) 'var' ist ein ** C# ** reservierter Name 2) der Name der Klasse ist' Var' aber was ist der Name des Objekts vom Typ 'Var' Sie instanziiert? meiner Meinung nach sollten Sie vermeiden, Ambiguität zu schaffen .. .den dann den Namen der Klasse in etwas anderes als 'Var' ändern und eine Instanz dieser Klasse mit einem anderen Namen als denen der Klasse selbst erstellen. – weirdgyn