【问题标题】:Data is visible in DataSet visualizer but does not show in a DataGrid数据在 DataSet 可视化工具中可见,但不在 DataGrid 中显示
【发布时间】:2017-07-17 21:13:09
【问题描述】:

我的代码是

public DataTable Load_to_DataGrid(string Line_ID)
{
    con.ConnectionString = ConfigurationManager.ConnectionStrings[1].ConnectionString;
    com = new SqlCommand("LoadPoints_ToGrid", con);
    com.CommandType = CommandType.StoredProcedure;
    com.Parameters.Add(new SqlParameter("@Line_ID", Line_ID));
    com.Parameters.Add("@outp", SqlDbType.NVarChar,40000).Direction = ParameterDirection.Output;
    SqlDataAdapter sda = new SqlDataAdapter(com);
    DataTable dt = new DataTable();

    sda.Fill(dt);
    return dt;            
 }

存储过程是

CREAT PROCEDURE [dbo].[LoadPoints_ToGrid](@Line_ID nvarchar(max),@outp nvarchar(max) output)       
AS
BEGIN
DECLARE @cols AS NVARCHAR(MAX),
      @query  AS NVARCHAR(MAX)
        select @cols=STUFF((select ','+ QUOTENAME(Thickness.Thicknes_Date) from Thickness
     where Line_ID=@Line_ID group by Thicknes_Date order by Thicknes_Date for XML path(''),TYPE ).
     value('.', 'NVARCHAR(MAX)') ,1,1,'')

    if (@Line_ID!='0')
        set @query = 'select Point_NO,'+@cols+',ST_CR,LG_CR from (select Thickness.Line_ID,Thicknes_Date,Points.Point_NO,Points.Point_Val,Points.ST_CR,Points.LG_CR from Thickness inner join Points on Thick_ID=Thicknes_ID) x 
   pivot 
   (
    sum(Point_Val)
    for Thicknes_Date in('+@cols+')
   )p where Line_ID='+@Line_ID

exec (@query)
    set @outp=@query
END

数据网格定义

<DataGrid x:Name="PointsDbGrid" Grid.Row="2" AutoGenerateColumns="True" ItemsSource="{Binding}" AlternatingRowBackground="#FFDCE890"   Margin="0,10,0,5" ColumnHeaderStyle="{StaticResource HeaderStyle}" ScrollViewer.CanContentScroll="True" ColumnWidth="70"  >
    <DataGrid.ContextMenu>

        <ContextMenu>
            <MenuItem Header="New Thickness" Click="MenuItem_Click">
                <MenuItem.Icon>
                    <Image Source="Images/Add.png" Stretch="Fill"/>
                </MenuItem.Icon>
            </MenuItem>
        </ContextMenu>
    </DataGrid.ContextMenu>
</DataGrid>

PointsDbGrid.DataContext = obj.Load_to_DataGrid(LineID).DefaultView;
//   PointsDbGrid.ItemsSource = obj.Load_to_DataGrid(LineID).DefaultView;

结果是

Dataset visualizer

Output

【问题讨论】:

    标签: c# wpf datatable datagrid


    【解决方案1】:

    当 DataGrid 为其 ItemsSource 生成列时,它使用 DataTable 列名作为列的绑定路径。虽然 / 符号在 DataColumn 名称中有效,但 in 在绑定路径中具有特殊含义,如果它是名称的一部分,则应将其转义,例如[80/4] 不是80/4

    将事件处理程序添加到 xaml 中的AutoGeneratingColumn 事件:

    AutoGeneratingColumn="Dg_OnAutoGeneratingColumn"
    

    并使用此代码修改绑定:

    private void Dg_OnAutoGeneratingColumn(object sender, DataGridAutoGeneratingColumnEventArgs e)
    {
        var textCol = e.Column as DataGridTextColumn;
        if (textCol == null)
            return;
        var binding = textCol.Binding as Binding;
        if (binding == null)
            return;
        binding.Path = new PropertyPath("[" + binding.Path.Path + "]");
    }
    

    【讨论】:

    • 我有一个相关的问题“PropertyPath 'Unmatched 括号中的语法错误”我如何编写同样适用于任何特殊字符的内容
    • @UdayTeja,看看the docs 中的DataTable 表达式语法并转义你名字中的特殊符号(在文章中搜索“必须转义”部分)
    • 谢谢@ASh 现在它在大多数情况下都有效。除了^(克拉)你能帮我吗
    • @UdayTeja,请通过minimal reproducible example提出一个单独的问题
    猜你喜欢
    • 1970-01-01
    • 2013-10-04
    • 1970-01-01
    • 2017-07-04
    • 2018-06-07
    • 2022-07-15
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多