Windows Forms: привязка свойства DataGridView RowCount к метке - PullRequest
0 голосов
/ 02 июля 2011

Я пытаюсь привязать свойство RowCount к метке для вывода пользователю текущего числа строк, отображаемых в DataGridView.

Я пробовал следующее: lblArticleCount.DataBindings.Add ("Text", datagrid, "RowCount");

Сначала кажется, что все будет работать именно так, как я хочу, но когда DataGridView обновляется и в нем содержится больше или меньше строк, метка остается прежней.Он не отображает новое количество строк.

Похоже, я на неправильном пути.Как бы вы решили это?Моя цель состояла в том, чтобы избежать реакции на события, чтобы вручную установить новый счетчик для метки.Разве нет другого пути?

Спасибо.

Ответы [ 4 ]

0 голосов
/ 02 июля 2011

Почему вы просто не подсчитываете количество строк в dataGridView, используя evnet RowsAdded и RowsRemoved? Проверьте этот код:

 public partial class Form1 : Form
{
    int rowsCount;
    public Form1()
    {
        InitializeComponent();
        dataGridView1.Columns.Add("col1", "Column 1");
        dataGridView1.RowsAdded += new DataGridViewRowsAddedEventHandler(dataGridView1_RowsAdded);
        dataGridView1.RowsRemoved += new DataGridViewRowsRemovedEventHandler(dataGridView1_RowsRemoved);
    }

    private void dataGridView1_RowsAdded(object sender, DataGridViewRowsAddedEventArgs e)
    {
        rowsCount++;
        CountRows();
    }

    private void dataGridView1_RowsRemoved(object sender, DataGridViewRowsRemovedEventArgs e)
    {
        rowsCount--;
        CountRows();
    }

    private void CountRows()
    {
        label1.Text = String.Format("Number of all rows {0}", rowsCount);
    }
}
0 голосов
/ 02 июля 2011
0 голосов
/ 02 июля 2011

Причина, по которой он не работает, заключается в том, что привязка данных является только улицей с односторонним движением. Привязка данных, как правило, является двусторонней привязкой, в которой, если изменяется элемент пользовательского интерфейса, то бизнес-объект уведомляется и, наоборот, если бизнес-объект изменяется, то элемент пользовательского интерфейса изменяется. Похоже, вы реализовали одностороннюю привязку данных.

0 голосов
/ 02 июля 2011

Это, вероятно, не то, что вы намереваетесь, но оно должно работать:

        Label showRowCount = new Label();
        DataGridView dgv = new DataGridView();
        dgv.RowsAdded += new DataGridViewRowsAddedEventHandler(dgv_RowsCountChanged);
        dgv.RowsRemoved += new DataGridViewRowsAddedEventHandler(dgv_RowsCountChanged);
    }

    void dgv_RowsCountChanged(object sender, DataGridViewRowsAddedEventArgs e)
    {
        showRowCount.Text = dgv.RowCount;
    }
...