2013-08-13 3 views
0

Я пишу программу в WPF (C#). Я использую DataSet для заполнения DataGrid. Ячейки DataGrid обновляют и изменяют свое положение и размер после прокрутки вверх/вниз! Как я могу решить эту проблему? Я хочу, чтобы DataGrid обновлялся до прокрутки.Обновление DataGrid после прокрутки вниз

вот пример:

Перед прокруткой:

Before

После прокрутки:

enter image description here


Вот мой XAML код:

<Window x:Class="RFID.CareerWindow" 
     xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
     xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
     Title="CareerWindow" Height="611" Width="459" Background="DarkGray"> 
    <Window.Resources> 
     <Style x:Key="GroupBoxStyle" TargetType="{x:Type GroupBox}"> 
      <Setter Property="FontFamily" Value="2 badr" /> 
      <Setter Property="FontSize" Value="20" /> 
      <Setter Property="FlowDirection" Value="RightToLeft"/> 
     </Style> 
    </Window.Resources> 
    <Viewbox VerticalAlignment="Top">  
    <Grid Width="428" Height="548"> 

      <Grid.Resources> 
       <Style x:Key="GroupBoxStyle" TargetType="{x:Type GroupBox}"> 
        <Setter Property="FontFamily" Value="2 badr" /> 
        <Setter Property="FontSize" Value="20" /> 
        <Setter Property="FlowDirection" Value="RightToLeft"></Setter> 
       </Style> 

       <Style x:Key="DataGridCellStyle" TargetType="DataGridCell"> 
        <Setter Property="HorizontalAlignment" Value="Center" /> 
       </Style> 
      </Grid.Resources> 




      <GroupBox Header="نوع عملیات" Margin="10,200,10,0" VerticalAlignment="Top" Height="110" Style="{StaticResource GroupBoxStyle}"> 
       <Canvas> 
        <RadioButton Content="اضافه کردن" Canvas.Left="10" Canvas.Top="11" IsChecked="True"/> 
        <RadioButton Content="بروز رسانی" Canvas.Left="161" Canvas.Top="11"/> 
        <RadioButton Content="حذف کردن" Canvas.Left="305" Canvas.Top="10"/> 
       </Canvas> 
      </GroupBox> 

      <GroupBox Header="" Margin="10,433,10,0" VerticalAlignment="Top" Height="105" Style="{StaticResource GroupBoxStyle}"> 
      <Canvas> 
       <Button x:Name="btnCancel" Content="بازگشت" FontFamily="2 badr" FontSize="20" FlowDirection="LeftToRight" Click="btnApply_Click" Height="54" Canvas.Left="212" Width="139" Canvas.Top="-3"/> 
       <Button x:Name="btnApply" Content="ذخیره" FontFamily="2 badr" FontSize="20" FlowDirection="LeftToRight" Click="btnApply_Click" Height="54" Canvas.Left="63" Width="139" Canvas.Top="-3"/> 
      </Canvas> 
     </GroupBox> 

     <GroupBox Header="اطلاعات شغل" Margin="10,315,10,0" VerticalAlignment="Top" Height="110" Style="{StaticResource ResourceKey=GroupBoxStyle}"> 
      <Canvas> 
       <RadioButton Content="اضافه کردن" Canvas.Left="10" Canvas.Top="11" IsChecked="True" HorizontalAlignment="Center" VerticalAlignment="Center"/> 
       <RadioButton Content="بروز رسانی" Canvas.Left="161" Canvas.Top="11" HorizontalAlignment="Center" VerticalAlignment="Center"/> 
       <RadioButton Content="حذف کردن" Canvas.Left="305" Canvas.Top="10" HorizontalAlignment="Center" VerticalAlignment="Center"/> 
      c</Canvas> 
     </GroupBox> 
      <DataGrid x:Name="dg1" HorizontalAlignment="Left" Margin="10,10,0,0" VerticalAlignment="Top" Height="185" Width="408" FlowDirection="RightToLeft" FontFamily="2 badr" FontSize="20" VerticalContentAlignment="Center" HorizontalContentAlignment="Center" AlternatingRowBackground="DarkGoldenrod"> 
      </DataGrid> 
     </Grid> 
    </Viewbox> 
</Window> 

и здесь C# код:

namespace RFID 
{ 
    /// <summary> 
    /// Interaction logic for CareerWindow.xaml 
    /// </summary> 
    public partial class CareerWindow : Window 
    { 
     public CareerWindow() 
     { 
      InitializeComponent(); 

      loadAll(); 
     } 

     private void loadAll() 
     { 
      DBConnect con = new DBConnect(); 
      dg1.ItemsSource = con.getTopCustomerInScore(0).Tables[0].DefaultView; 

     } 
    } 
} 
+1

Пожалуйста, внесите свой код. – Srinivas

ответ

0

Я думаю, что эта проблема вызвана UI-виртуализации: WPF просто заполнит видимую часть сетки, поэтому он измеряет только ширину из этих видимых записей.

Возможные решения:

  • Отключить виртуализации (но имейте в виду, что это может повредить производительности ...)
  • Настройка ширина столбцов вручную (DataGrid.AutoGenerateColumns = ложь)
Смежные вопросы