2015-01-13 6 views
5

Я автоматически заполнил DataGrid из DataTable с SQL-сервера. Я хочу, чтобы пользователь мог добавлять или удалять, какие столбцы видны. Первоначально я попытался это:Как спрятать автоматически созданные столбцы в DataGrid?

public void populateTaskTable(DataTable dt) 
    {      
     //add the whole datatable to the datagrid 
     dg.DataContext = dt.DefaultView; 

     dg.Columns[0].Visibility = Visibility.Collapsed; 
    } 

Для соответствующего XAML (я попытался с и без AutoGenerateColumns="True"

  <DataGrid Name="dg" ItemsSource="{Binding}" AutoGenerateColumns="True" 

        <!-- <DataGrid.Columns></DataGrid.Columns> --> 

      </DataGrid> 

что привело к нарушению памяти перерыва Затем я сделал

MessageBox.Show(dg.Columns.Count()); 
.

, чтобы увидеть, были ли заполнены столбцы, чего не было, он выводит 0, хотя я мог видеть столбцы в программе.

Я обнаружил from this previous stackoverflow question, что «автоматически создаваемые столбцы не добавляются в индекс столбцов».

Затем from this question я попытался обновить DataGrid, чтобы получить столбцы заселена как так

taskTable.UpdateLayout(); 

и

taskTable.Items.Refresh(); 

Который ничего не делает.

Есть ли способ получить доступ к свойствам автоматически созданного DataGrid или добавить все столбцы DataGrid к компоненту Columns?

Заранее спасибо.

+0

Я обновил свой ответ, связанный ответ неверен. Он ссылается на документы msdn для Web not Wpf. Я оставил комментарий ниже этого ответа для будущих читателей. –

ответ

6

Подключите AutoGeneratingColumn событие и скройте столбец.

dataGrid.AutoGeneratingColumn += dataGrid_AutoGeneratingColumn; 

void dataGrid_AutoGeneratingColumn(object sender, DataGridAutoGeneratingColumnEventArgs e) 
{ 
    e.Column.Visibility = Visibility.Collapsed; 
} 

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

private void DataGrid_OnAutoGeneratingColumn(object sender, DataGridAutoGeneratingColumnEventArgs e) 
{ 
    if (e.PropertyName == "YourProperty") 
    { 
     e.Column.Visibility = Visibility.Collapsed; 
    } 
} 

Или вы можете использовать AutoGeneratedColumns событие. Он будет запущен, когда будут созданы все столбцы.

dataGrid.AutoGeneratedColumns += DataGrid1_AutoGeneratedColumns; 

void DataGrid1_AutoGeneratedColumns(object sender, EventArgs e) 
{ 
    int columnsCount = DataGrid1.Columns.Count; 
    //You can access the columns here. 
} 

Ссылку вы упомянули, что говорит Автоматически генерируемые столбцы не добавляются в коллекцию Columns. Я только что заметил, что Созданные автоматически столбцы действительно добавлены в коллекцию. Это плохой ответ, который ссылается на документацию System.Web.UI.WebControls.DataGrid, что очень неправильно.

+0

Спасибо или ваш ответ! Этот код скрывает все столбцы. Как я могу указать столбцы? –

+0

Проверьте, является ли столбец для вашего свойства следующим: 'if (e.PropertyName ==" YourPropertyName ")'. Я обновлю свой ответ –

+0

Спасибо за кучу. Работает. –

Смежные вопросы