Так что я пытаюсь найти некоторую логику. Все плохо.Проблемы с удалением rowindex в dataGridView
Моя проблема, на данный момент, заключается в чтении локального XML-документа в dataGridView. (метод LoadXmlButton_Click)
Вот мой код:
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using System.Xml;
namespace AddProducts_XMLForms
{
public partial class MainForm : Form
{
public MainForm()
{
InitializeComponent();
}
public DataTable dst = new DataTable();
Guid id = Guid.NewGuid();
private void Form1_Load(object sender, EventArgs e)
{
dst.Columns.Add("Artikelnummer", typeof(string));
dst.Columns.Add("Kategori", typeof(string));
dst.Columns.Add("Beskrivning", typeof(string));
dst.Columns.Add("Pris", typeof(decimal));
dst.Columns.Add("Bildadress", typeof(string));
}
private void loadXmlButton_Click(object sender, EventArgs e)
{
try
{
dst.ReadXml("products.xml");
productsDataGridView.DataSource = dst;
}
catch (Exception ex)
{
MessageBox.Show(ex.Message);
}
}
private void exportXmlButton_Click(object sender, EventArgs e)
{
try
{
dst = (DataTable)productsDataGridView.DataSource;
dst.TableName = "Product";
dst.WriteXml("products.xml", true);
xmlExportedLabel.Text = "OK";
xmlExportedLabel.ForeColor = Color.Green;
}
catch (Exception ex)
{
MessageBox.Show(ex.Message);
}
}
private void deleteButton_Click(object sender, EventArgs e)
{
try
{
dst.Rows.RemoveAt(productsDataGridView.CurrentCell.RowIndex);
productsDataGridView.DataSource = dst;
}
catch (Exception ex)
{
MessageBox.Show(ex.Message);
}
}
private void addProductButton_Click_1(object sender, EventArgs e)
{
try
{
dst.Rows.Add(id.ToString(), categoryCheckListBox.SelectedItem, descriptionTextBox.Text, priceTextBox.Text, imageUrlTextBox.Text);
productsDataGridView.DataSource = dst;
foreach (int i in categoryCheckListBox.CheckedIndices)
{
categoryCheckListBox.SetItemCheckState(i, CheckState.Unchecked);
}
categoryCheckListBox.ClearSelected();
priceTextBox.Clear();
imageUrlTextBox.Clear();
descriptionTextBox.Clear();
}
catch (Exception ex)
{
MessageBox.Show(ex.Message);
}
}
int i;
private void editButton_Click(object sender, EventArgs e)
{
try
{
DataGridViewRow row = productsDataGridView.Rows[i];
row.Cells[1].Value = categoryCheckListBox.SelectedItem;
row.Cells[2].Value = priceTextBox.Text;
row.Cells[3].Value = descriptionTextBox.Text;
row.Cells[4].Value = imageUrlTextBox.Text;
}
catch (Exception ex)
{
MessageBox.Show(ex.Message);
}
}
}
}
Он просто не будет загружать продукты в XML и поместить их там, где я хочу их, и я не то, что хорошо при отладке, но пока его кажется, что если переписать код loadXmlButton_Click:
private void loadXmlButton_Click(object sender, EventArgs e)
{
try
{
var dt = new DataSet();
dt.ReadXml("products.xml");
productsDataGridView.DataSource = dt.Tables[0];
}
catch (Exception ex)
{
MessageBox.Show(ex.Message);
}
}
Он теперь будет загружен в DataGridView правильно, но тогда мой метод удаления не будет работать. Возможно, мой метод удаления является основной проблемой? Я смущен!
private void deleteButton_Click(object sender, EventArgs e)
{
try
{
dst.Rows.RemoveAt(productsDataGridView.CurrentCell.RowIndex);
productsDataGridView.DataSource = dst;
}
catch (Exception ex)
{
MessageBox.Show(ex.Message);
}
}
Показать MessageBox в регионе try, чтобы проверить, выполняется ли deleteButton_Click или нет? – Charlie
Можете ли вы указать? У меня есть обработчик исключений для deleteButton_Click, и он выполняется. Исключение: «В индексе нет строки». @Charlie – Awots
Использовать MessageBox (productsDataGridView.Rows.Count); чтобы проверить, содержит ли он какую-либо строку. – Charlie