Отключение редактирования определенной ячейки в DataGrid - PullRequest
3 голосов
/ 03 февраля 2012

Мне нужно знать, возможно ли отключить редактирование определенной ячейки в DataGrid, без , отключив редактирование всего столбца в Silverlight 4. Я могу получить конкретный объект ячейки как FrameworkElement, но это не содержит свойство IsReadOnly или IsEnabled. Вы, вероятно, спросите: зачем мне это? Ну, мое приложение требует отключения определенных ячеек в строке в зависимости от содержимого других ячеек. Каждый ряд проверяется таким образом отдельно. Если у вас есть идея, как мне добиться такого необычного поведения, напишите;)

Ответы [ 3 ]

2 голосов
/ 27 ноября 2015

Вы можете использовать атрибут IsReadOnly для конкретной ячейки, например, такой:

 <DataGridTextColumn Header="ID"
                                        Binding="{Binding ID}"
                                        IsReadOnly="True"/>

В этом случае это лучшая идея для отключения определенной ячейки.Спасибо

1 голос
/ 03 февраля 2012

Если у вас есть строка, индекс столбца ячейки / ячеек, которые вы хотите отключить:

int r = 2, c = 4;

Затем вы можете прослушать события CellEnter и CellLeave и выполнить следующие действия:

    private void dataGridView1_CellEnter(object sender, DataGridViewCellEventArgs e)
    {
        if (e.RowIndex == r)
        {
            if (e.ColumnIndex == c)
            {
                dataGridView1.Columns[e.ColumnIndex].ReadOnly = true;
            }
        }
    }

    private void dataGridView1_CellLeave(object sender, DataGridViewCellEventArgs e)
    {
        if (e.RowIndex == r)
        {
            if (e.ColumnIndex == c)
            {
                dataGridView1.Columns[e.ColumnIndex].ReadOnly = false;
            }
        }
    }

Вы по-прежнему устанавливаете для всего столбца значение «Только чтение», но, поскольку вы сбрасываете его обратно после того, как покидаете ячейку, появляется эффект работы только для ячейки.

0 голосов
/ 15 апреля 2013

Спасибо NominSim, это помогает мне решить мою проблему, но как нейротикс не нашел методы CellEnter и CellLeave в моей DataGrid в SilverLight 4.

Как сказал NominSim, вам нужно знать индекс строки и столбца.

Как мне это решить:

Отключить редактирование

System.Windows.Threading.DispatcherTimer timMakeEditable = new System.Windows.Threading.DispatcherTimer();

  private void dataGrid1_PreparingCellForEdit(object sender, DataGridPreparingCellForEditEventArgs e)
{
    timMakeEditable.Interval = new TimeSpan(0, 0, 0, 0, 100); // 100 Milliseconds 
    timMakeEditable.Tick += new EventHandler(timer_Tick);
    timMakeEditable.Start();

    if (e.RowIndex == r && e.ColumnIndex == c)
    {
            dataGrid1.Columns[yourColumnIndex].IsReadOnly = true;     
    }
}

Включить редактирование

Через несколько миллисекунд таймер включает столбец:

void timer_Tick(object sender, EventArgs e)
    {
        dataGrid1.Columns[yourColumnIndex].IsReadOnly = false;
        timMakeEditable.Stop();  

    }

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

...