Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/wpf/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 在WPF DataGrid中格式化自动生成的列_C#_Wpf_Sqlite_Datagrid - Fatal编程技术网

C# 在WPF DataGrid中格式化自动生成的列

C# 在WPF DataGrid中格式化自动生成的列,c#,wpf,sqlite,datagrid,C#,Wpf,Sqlite,Datagrid,我通过一个SQLite适配器从SQLite检索了一些数据,并将其填充到DataTable中,如下所示: using (conexionSQLite = new SQLiteConnection(Datos.stringConexionSQLite)) { conexionSQLite.Open(); string textoSQLite; SQLiteDataAdapter adaptadorSQLite; try { textoSQLit

我通过一个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.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

分类一种或另一种格式,我知道这是一篇老文章,但我最近遇到了这个问题。我在这里发布了一个解决方案,以防它对任何人都有帮助。以下是我在
自动生成列中所做的操作:


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

只是出于兴趣,为什么您要在代码中编写此代码而不是使用Xaml设计器?这是一个非常小的应用程序,不值得实现MVVM模式吗?@Hardgraf这只是为了显示一些数据以供读取,我不认为创建这种结构的模型和视图模型是值得的。我想这取决于应用程序将变得多么复杂。但是如果你正在计划CRUD功能等,那么可能值得实现MVVM。@Hardgraf我的意思是我在我的大多数应用程序中使用MVVM,这只是一个始终是只读的片段,所以没有积垢。我个人只想在XAML中定义datagrid。将AutoGenerateColums=false&充实一个符合您需求的数据网格样式。想必您知道要输入什么数据,这样您就可以自己定义列了?
if (e.PropertyType == typeof(int))
{
    DataGridTextColumn dataGridTextColumn = e.Column as DataGridTextColumn;
    if (dataGridTextColumn != null)
    {
        dataGridTextColumn.Binding.StringFormat = "{0:p}";
    }
 }