格式化WPF数据网格中自动生成的列

本文关键字:自动生成 网格 WPF 数据 数据网 格式化 | 更新日期: 2024-09-23 13:38:56

我通过一个SQLite适配器从SQLite检索到一些数据,并将其填充到DataTable中,如下所示:

using (conexionSQLite = new SQLiteConnection(Datos.stringConexionSQLite))
{
    conexionSQLite.Open();
    string textoSQLite;
    SQLiteDataAdapter adaptadorSQLite;
    try
    {
        textoSQLite = "SELECT Fecha, ROUND(ValorTotal,0) as ValorTotal, ROUND(ValorProductoTerminado,0) as ValorProductoTerminado, ROUND(ValorSemielaborados,0) as ValorSemielaborados, ROUND(ValorMateriasPrimas,0) as ValorMateriasPrimas, ROUND(ValorEnvases,0) as ValorEnvases FROM valorStockPorFecha";
        adaptadorSQLite = new SQLiteDataAdapter(textoSQLite, conexionSQLite);
        adaptadorSQLite.Fill(bd, "tablaValorStock");
    }
    catch (SQLiteException excepcionSQL)
    {
        Console.WriteLine("Error: " + excepcionSQL.ToString());
    }
}
DataTable tablaValorStock = bd.Tables["tablaValorStock"];

然后我将其绑定到DataGrid:

dataGrid.ItemsSource = tablaValorStock.DefaultView;

这会自动生成所有列。

我想要的是格式化一些列,而不必首先手动定义它们。

我在想某种自动生成列的事件处理,类似于这段代码,它适用于Windows窗体的DataGrid等价物:

private void RadGridView1_AutoGeneratingColumn(object sender, GridViewAutoGeneratingColumnEventArgs e)
{
    GridViewDataColumn column = e.Column as GridViewDataColumn;
    if (column.DataType == typeof(int))
    {
        column.DataFormatString = "{0:p}";                             
    }
}

我会基于DataGridColumn.Header 来分析一种或另一种格式

格式化WPF数据网格中自动生成的列

我知道这是一篇旧帖子,但我最近遇到了这个问题。我在这里发布了一个解决方案,以防对任何人都有帮助。以下是我在AutoGeneratingColumn中所做的操作:

if (e.PropertyType == typeof(int))
{
    DataGridTextColumn dataGridTextColumn = e.Column as DataGridTextColumn;
    if (dataGridTextColumn != null)
    {
        dataGridTextColumn.Binding.StringFormat = "{0:p}";
    }
 }

正如@Hardgraf所建议的,在大多数情况下,最好在XAML中指定它。然而,这就是为什么我需要在C#代码中完成这项工作。我必须显示从存储过程返回的大约20个表。表的数量和列名完全由存储过程决定。如果可能的话,在XAML中做这件事会非常困难。即使我设法使它在XAML中工作,代码也很难阅读。但当我在C#代码中这样做时,一个简单的循环和AutoGeneratingColumn的事件处理程序将很好地完成任务。