Могу ли я указать, какие столбцы можно редактировать в WPF DataGrid? - PullRequest
6 голосов
/ 17 декабря 2010

У меня есть таблица данных WPF 4.0 с автоматически сгенерированными столбцами.Я хотел бы только разрешить пользователю редактировать первый столбец.Есть ли простой способ сделать это?

Я пытался добавить стиль DataGridCell и установить его возможность редактирования на основе либо ColumnName (1-й столбец всегда имеет одинаковое имя), либо ColumnIndex, однако я не могу понятьисправьте XAML для этого, или даже если это возможно.

Ответы [ 4 ]

15 голосов
/ 05 декабря 2012

Приведенный ниже пример делает один или несколько столбцов

  private void Grid_AutoGeneratingColumn(object sender, DataGridAutoGeneratingColumnEventArgs e)
    {
        if (e.Column.Header.ToString() == "COLUMNNAME")
        {
            // e.Cancel = true;   // For not to include 
            // e.Column.IsReadOnly = true; // Makes the column as read only
        }

    } 
6 голосов
/ 17 декабря 2010

Я понял .... вот что я использовал:

<DataGrid.Resources>
    <Style TargetType="{x:Type DataGridCell}">
        <Setter Property="IsEnabled" Value="False" />
        <Style.Triggers>
            <DataTrigger Value="PART_IsSelected" Binding="{Binding Path=Column.Header, RelativeSource={RelativeSource Self}}">
                <Setter Property="IsEnabled" Value="True" />
            </DataTrigger>
        </Style.Triggers>
    </Style>
</DataGrid.Resources>

Если хотите, вы можете использовать Column.DisplayIndex вместо Column.Header

Я до сих пор не уверен, почему привязка не будет работать напрямую, и на нее должен ссылаться RelativeSource, но по крайней мере она работает:)

6 голосов
/ 17 декабря 2010

Каждый столбец имеет свойство IsReadOnly. Кроме того, весь DataGrid также имеет IsReadOnly [это НЕ влияет на привязку, только возможность пользователя редактировать поле]

EDIT: Прорыл ответ, извини. Я могу только догадываться, что вы НЕ должны автоматически генерировать столбцы, если это возможно, так что вы можете контролировать, какие из них доступны только для чтения, а какие - на шаблон управления, куда ... просто используйте свойство Binding столбцов, чтобы вам не нужно было автоматически генерировать их.

0 голосов
/ 16 июня 2016
private void dgTableDetailAdj_RowEditEnding(object sender, DataGridRowEditEndingEventArgs e)
{
    foreach (DataGridColumn col in dgTableDetailAdj.Columns)
    {
        if (col.Header.Equals("columnName"))
        {
            col.IsReadOnly = true;
        }
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...