Работая над приложением диспетчера паролей, я дошел до того, что оно будет принимать пользовательские данные из второй формы, записывать в файл XML, затем в первой форме анализировать данные xml и заполнять представление данных с помощью вся предоставленная пользователем информация об учетной записи. Пока работает отлично, но я хотел бы закодировать некоторые функции, которые обновляют отображение текущего dataGridview, если пользователь добавляет другую учетную запись, без необходимости повторного выбора группы учетных записей в поле со списком. В настоящее время он обновляется только для отображения вновь добавленной учетной записи после того, как пользователь выбирает группу учетных записей во второй раз. Как я могу изменить свой код, чтобы это исправить? Код выглядит следующим образом:
public partial class Form1 : Form
{
public string fileName = "passfile.xml";
public DataSet ds = new DataSet("Account List");
public DataTable accounts = new DataTable("Accounts");
public Form1()
{
InitializeComponent();
accountGroupsBox.Enabled = false;
menuStrip1.Enabled = false;
button2.Enabled = false;
Types type = new Types();
this.accountGroupsBox.Items.AddRange(type.accountTypes);
accounts.Columns.AddRange(new DataColumn[] {
new DataColumn("Username"),
new DataColumn("Password"),
new DataColumn("Description")});
dataGridView1.DataSource = accounts;
}
private void addNewPasswordToolStripMenuItem_Click(object sender, EventArgs e)
{
Form2 addAccount = new Form2(this);
addAccount.Show();
}
private void S_Click(object sender, EventArgs e)
{
accountGroupsBox.Enabled = true;
menuStrip1.Enabled = true;
button2.Enabled = true;
label2.Text = "Interface Unlocked";
}
private void accountGroupsBox_SelectedIndexChanged(object sender, EventArgs e)
{
accounts.Clear();
XmlDocument doc = new XmlDocument();
doc.Load(fileName);
foreach (XmlNode node in doc.GetElementsByTagName("Account"))
{
if (node["AccountType"].InnerText == accountGroupsBox.SelectedItem.ToString())
{
DataRow row = accounts.Rows.Add(
node["Username"].InnerText,
node["Password"].InnerText,
node["Description"].InnerText);
}
}
}
А вот код для второй формы:
public partial class Form2 : Form
{
Form1 f;
public Form2(Form1 fr1)
{
InitializeComponent();
f = new Form1();
f = fr1;
Types types = new Types();
this.comboBox1.Items.AddRange(types.accountTypes);
}
private void button1_Click(object sender, EventArgs e)
{
string fileName = "passfile.xml";
XmlDocument file = new XmlDocument();
XmlTextReader read = new XmlTextReader(fileName);
if (File.Exists(fileName))
{
XmlDocument doc = new XmlDocument();
doc.Load(fileName);
XmlElement account = doc.CreateElement("Account");
XmlElement type = doc.CreateElement("AccountType");
type.InnerText = comboBox1.SelectedItem.ToString();
XmlElement userName = doc.CreateElement("Username");
userName.InnerText = textBox1.Text;
XmlElement passWord = doc.CreateElement("Password");
passWord.InnerText = textBox2.Text;
XmlElement desc = doc.CreateElement("Description");
desc.InnerText = textBox3.Text;
account.AppendChild(type);
account.AppendChild(userName);
account.AppendChild(passWord);
account.AppendChild(desc);
doc.DocumentElement.InsertAfter(account, doc.DocumentElement.LastChild);
doc.Save(fileName);
f.dataGridView1.Update();
this.Close();
}
else
{
XmlDocument doc = new XmlDocument();
XmlElement account = doc.CreateElement("Account");
XmlElement type = doc.CreateElement("AccountType");
type.InnerText = comboBox1.SelectedItem.ToString();
XmlElement userName = doc.CreateElement("Username");
userName.InnerText = textBox1.Text;
XmlElement passWord = doc.CreateElement("Password");
passWord.InnerText = textBox2.Text;
XmlElement desc = doc.CreateElement("Description");
desc.InnerText = textBox3.Text;
account.AppendChild(type);
account.AppendChild(userName);
account.AppendChild(passWord);
account.AppendChild(desc);
doc.AppendChild(account);
doc.Save(fileName);
this.Close();
}
}
}
}