DataGridView на WinForms выдает исключение при удалении записи - PullRequest
1 голос
/ 21 мая 2009

Я не так много сделал с WinForms, поэтому мне интересно, кто-нибудь может мне помочь с этим. У меня есть DataGridView, который связан с IList <>. Когда я удаляю выбранную запись из коллекции (ILIST <>), я получаю следующее исключение:

«System.IndexOutOfRangeException: у индекса 3 нет значения»

Я думаю, что моя привязка тоже немного хромает. Так что, может быть, кто-то может дать мне указатель и здесь.

 public Form1()
    {
        InitializeComponent();
        empGrid.DataSource = stub.GetAllEmplyees();
        empGrid.Columns["FirstName"].Visible = true;
        StatusStrip.Text = "Employee Administration";

    }

Что я хотел бы сделать, это удалить запись, а затем обновить DataGridGridView. Каков наилучший способ определить, какие свойства вы хотите отобразить в столбцах?

Большое спасибо!

Ответы [ 2 ]

0 голосов
/ 21 мая 2009

Рассмотрите возможность использования источника привязки (перетащите его из панели инструментов и установите источник данных для нужного вам типа класса:

public partial class Form1 : Form
{

    public Form1()
    {
        InitializeComponent();
    }

    List<MyClass> list = new List<MyClass>();
    private void Form1_Load(object sender, EventArgs e)
    {
        this.bindingSource1.DataSource = typeof(WindowsFormsApplication1.MyClass);

        list.AddRange(new MyClass[] {
            new MyClass { Column1 = "1", Column2 = "1" },
            new MyClass { Column1 = "2", Column2 = "2" }
            });

        bindingSource1.DataSource = list;
        bindingSource1.Add(new MyClass { Column1 = "3", Column2 = "3" });
    }

    private void button1_Click(object sender, EventArgs e)
    {
        //Here you remove rows without taking care of the representation:
        bindingSource1.RemoveAt(0); 
    }
}


class MyClass
{
    public string Column1 { get; set; }
    public string Column2 { get; set; }
}
0 голосов
/ 21 мая 2009

Я делаю это таким образом, не используя источник данных, поскольку мне пришлось настраивать выходные данные ячейки.

// for inserts
foreach (var item in data)
{
    DataGridViewRow newRow = new DataGridViewRow();
    newRow.CreateCells(myDataGridView,
        your,
        data,
        for,
        each,
        cell,
        here);
    myDataGridView.Rows.Add(newRow);
}

    // for updates
    myDataGridView.Rows[rowIndex]
        .SetValues(cell,data,you,wish,to,change,here);

Для удаления я не столкнулся с проблемами при использовании:

myDataGridView.Rows.RemoveAt(rowIndex);

myDataGridView.Refresh(); должно работать для обновления.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...