我使用简单的xml数据库编写了一个小项目,我的C#级别很低,因为我在编写代码时学习。
我项目的一部分包括拥有名称,名字,登录名,密码......的用户数据库。
我正在使用xml数据库:
<?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>
我使用此代码绑定数据库
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;
}
我在表单中有一个datagridview,在另一种表单中我有一个名为+ firstname和texboxes的列表框
this is how the page looks like 现在我想用所选人员的所有数据填充文本框但是不起作用,当我从列表框中选择一个名称时,只有数据库的第一个条目显示在文本框中,这里是&#39; s我使用的代码:
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;
}
}
}
我尝试过多次搜索我的问题,但无法找到适合我的任何内容
由于
编辑:
Var.cs看起来像这样
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;
}
重新创建它,如下所示:
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;
}
}
最后截图:
答案 0 :(得分:0)
我发现了问题,你在搜索失败了......在代码中:
private void listBox_GP_Fichiers_SelectedIndexChanged(object sender, EventArgs e)
{
// voir si il y a du personnel selectionné
if (listBox_GP_Fichiers.SelectedItems.Count != 0)
{
// si oui, affichage du résultat
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();
string aux = "";
aux = dataGridView_P[1, x].Value.ToString() + " " + dataGridView_P[2, x].Value.ToString();
if (s.Equals(aux))
{
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;
}
}
}
您在datagridview中搜索数据N次,其中N是列表框中所选项目的数量...当然,因为您只在列表框中选择了一个项目,所以您将只循环一次并且当然,这将始终检查存储在datagridview中的第一条记录..在这种情况下只是&#34; John Doe&#34; ...结果是你永远不会用不同于第一条记录的数据来填充文本框datagridview中的行。
解决方案是迭代datagridview元素而不是选定的项目,并检查所选项目。
除此之外,我还有许多其他的推荐,可以概括为一个&#34;你必须更多地学习和练习&#34;。如果你想我可以给你一些提示,但我认为阅读一本好的编码书会做得更好。
答案 1 :(得分:0)
这是正确的程序...请注意,我删除了所有与您的需求无关的代码行...您可以自由重新插入它们,但请认为这可能毫无价值。
private void listBox_GP_Fichiers_SelectedIndexChanged(object sender, EventArgs e)
{
if (listBox_GP_Fichiers.SelectedItems.Count == 0)
return;
for(int x = 0; x < dataGridView_P.RowCount; x++)
{
string s = "";
string aux = "";
s = dataGridView_P[1, x].Value.ToString() + " " + dataGridView_P[2, x].Value.ToString();
aux = listBox_GP_Fichiers.SelectedItems[0].ToString();
if (s.Equals(aux))
{
Var.GP_Id = dataGridView_P[0, x].Value.ToString();
Var.GP_Access_Level = dataGridView_P[3, x].Value.ToString();
Var.GP_Color = dataGridView_P[4, x].Value.ToString();
textBox_GP_Nom.Text = Var.GP_Nom = dataGridView_P[1, x].Value.ToString();
textBox_GP_Prénom.Text = Var.GP_Prénom = dataGridView_P[2, x].Value.ToString();
textBox_GP_Login.Text = Var.GP_Login = dataGridView_P[5, x].Value.ToString();
textBox_GP_MDP.Text = Var.GP_MDP = dataGridView_P[6, x].Value.ToString();
}
}
}