c# - डेटा डेटासेट विज़ुअलाइज़र में दिखाई देता है, लेकिन डेटाग्रिड में नहीं दिखता है



wpf datatable (1)

मेरा कोड है

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;            
 }

संग्रहित Proc है

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('[email protected]+')
   )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;

परिणाम है

दसेटसेट विजुअलाइज़र

Output


जब DataGrid अपने ItemSource के लिए कॉलम बनाता है, तो वह कॉलम के लिए बाइंडिंग पथ के रूप में DataTable कॉलम नामों का उपयोग करता है। जबकि DataColumn नामों में / प्रतीक मान्य है, बाइंडिंग पथ में एक विशेष अर्थ है और अगर यह नाम का एक भाग है, तो बच जाना चाहिए, जैसे [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 + "]");
}




datagrid