特定のdataGridセルをコードビハインドで隠す/折りたたむ方法はありますか?私のデータテーブルの列は実行時に作成されるので、これらのデータトリガー、テンプレートセレクタなどを正しく設定するためのプロパティ(XAML内)を指定することはできません。 私はループで折りたたみたい正確なセルを見つけることができます行/列インデックスをリスト(下)に追加するためのデータテーブルを介して。wpf C#でDataGridのセルをプログラムで非表示にするにはどうすればよいですか?
私はこれが正統ではないことを知っていますが、私はこれを解決しようと何週間もスレッドを読んできましたが、何も私をそこに入れてくれませんでした。これは、(可能であれば)最も簡単な解決策のようです。
private static List<KeyValuePair<int, int>> GetCellsToHide(DataTable pivotTable)
{
var noCellValueList = new List<KeyValuePair<int, int>>();
foreach (DataRow row in pivotTable.Rows)
{
foreach (DataColumn col in pivotTable.Columns)
{
if (row[col].ToString() == "HideMe")
{
int rowIndex = pivotTable.Rows.IndexOf(row);
int colIndex = pivotTable.Columns.IndexOf(col);
noCellValueList.Add(new KeyValuePair<int, int>(rowIndex, colIndex));
}
}
}
return noCellValueList;
}
編集:DataTemplateの&コンバータ情報
私は現在autogeneratingcolumnsでデータグリッドを構築しています。私は他のすべての列の名前を知っているので、動的に生成される列に絞り込むことができます。私の動的な列はDataTemplate5、例えば(以下簡易版)は次のとおりです。
private void DataGrid_AutoGeneratingColumn(object sender, DataGridAutoGeneratingColumnEventArgs e)
{
if (e.Column.Header.ToString() == "Name")
e.Column.Header = "File Name";
else
{
string origHeader = e.Column.Header.ToString();
DataGridTemplateColumn templateColumn = new DataGridTemplateColumn //create new template column
{
Header = origHeader,
CellTemplate = (DataTemplate)Resources["DataTemplate5"]
};
e.Column = templateColumn; // Replace the auto-generated column with the templateColumn.
}
}
をしかし、私はに結合する性質(列)の名前を持っていないので、私はそれを正しくバインドすることができていません。ここでDataTemplateを& ivalueconverterを介して細胞を隠しで私の最新の試みです:
<DataTemplate x:Key="DataTemplate5">
<DataTemplate.Resources>
<local:StringToVisibilityConvertor x:Key="VisibilityConvertor" />
</DataTemplate.Resources>
<StackPanel Visibility="{Binding BindsDirectlyToSource=True, Converter={StaticResource VisibilityConvertor}}">
<Button Name="Button1" Click="ButtonClick">
<Button.Style>
<Style TargetType="Button">
<Style.Setters>
<Setter Property="Background" Value="Orange"/>
</Style.Setters>
</Style>
</Button.Style>
</Button>
</StackPanel>
</DataTemplate>
およびコンバータ:
public class StringToVisibilityConvertor : IValueConverter
{
public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
{
if (value.ToString() != "HideMe")
return Visibility.Visible;
return Visibility.Collapsed;
}
ただ明確にしようとしている - あなたは右、全体の列を非表示の話をしていますか?あなたの質問はそれを言いますが、あなたは説明が個々の細胞について話しているようです。あなたが細胞を話しているなら、細胞が隠されているときに何が起こることを期待していますか? 列について話している場合は、DataColumnの表示をCollapsedに設定してみましたか? –
申し訳ありませんタイトルを編集しました。つまり、列全体ではなく特定のセルを非表示にすることです。 – ctalley5
私のデータテーブルは、たくさんのリンク列で構成されています。私のデータグリッドは、それらをリンクを開くボタンとして表示します。多くのセルにはnull値がありますが、それでもボタンとして表示され、データの悪い表現です。それらのセルを空白にして、リンクを開くセルのボタンのみを表示する必要があります。 – ctalley5