我的代码是
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;
Event.joins(:participants).select("participants.*")
结果是
答案 0 :(得分:2)
当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 + "]");
}