Datagrid向上滚动调用转换器并移动单元格值

时间:2015-01-14 02:52:06

标签: c# wpf datagrid componentone

我在过去4天的情况下真的很挣扎,现在正在拉扯我的头发。请帮帮我们。这是要求:

我有一个数据网格,它当前与数据收集绑定并且工作正常。现在在列中的一个列中我需要显示一个日期时间值,但是在每个第10行中,该值必须在DateTime值中,而其他行表示0到9行,需要只显示时间值。

上面我使用转换器实现的方案,它工作正常。现在问题出现了:"如果我向下滚动它会获得正确的数据但是每当我向上滚动它再次调用转换器时就会出现问题(它会随机显示DateTime值而不是每个第10行) "

我尝试过将转换器设为null,但之后它也无法正常工作。

以下代码仅供参考(我删除了不必要的列):

我有一个数据网格,如下所示:

  <c1:C1DataGrid  DockPanel.Dock="Top" ScrollMode="Deferred" 
        VirtualizingStackPanel.VirtualizationMode="Standard" 
        VirtualizingStackPanel.IsVirtualizing="True" 
        Name="TabulerDataGrid" AlternatingRowBackground="#A4CEDCF6"
        MouseOverBrush="#9546E400" SelectedBackground="#9AA46D00"
        Visibility="Hidden" >
  </c1:C1DataGrid>

我将数据集合绑定到网格,如下所示:

    private void BindDataGrid(object sender, EventArgs e)
    {
        foreach (DataColumn col in dataCollection.Columns)
            {
                if (col.ColumnName == "Time")
                {
                    C1.WPF.DataGrid.DataGridDateTimeColumn column = 
                        new C1.WPF.DataGrid.DataGridDateTimeColumn();

                    column.Format = GlobalDataDisplay.DateFormat;  //TTP 6321
                    column.FilterMemberPath = "OnlyDate";
                    DataGridContentFilter f = new DataGridContentFilter();
                    DataGridDateTimeFilter d = new DataGridDateTimeFilter();
                    d.EditMode = C1DateTimePickerEditMode.DateTime;
                    f.Content = d;
                    column.Filter = f;
                    column.CanUserFilter = true;
                    column.Header = col.ColumnName;

                   column.Binding = new System.Windows.Data.Binding {
                             Path = new PropertyPath(col.ColumnName), 
                        Converter = new ConvertDateChange()};

                    TabulerDataGrid.Columns.Add(column);
                }
          }   
            TabulerDataGrid.ItemsSource = dataCollection.DefaultView; 

    }

这是我的Converter类:

public class ConvertDateChange : IValueConverter
{
    int i = 0;
    public object Convert(object value, Type targettype, object parameter, System.Globalization.CultureInfo cluture)
    {

        if (i == 10)
        {
            i = 0;
        }
        else
        {
            i++;

        }
        string s = value.ToString();
        if (string.IsNullOrEmpty(s))
        {
            i = 0;

            return null;
        }
        else
        {
            string[] str = s.Split(' ');
            s = str[1];
            s = s.Substring(s.IndexOf(" ") + 1);
            if (i == 1)
            {
                return value;
            }
            else
            {
                return s;
            }
        }
    }

    public object ConvertBack(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
    {
        throw new NotImplementedException();
    }
}

1 个答案:

答案 0 :(得分:0)

这需要一点点,所以如果这没有帮助,我道歉。但是我自己做了这件事,我希望它能做到:

不是将datagrid直接绑定到数据集合,而是修改数据显示方式的行为...尝试创建表视图并将其用作临时数据。

只需将表视图的源设置为数据集,然后对表视图中的信息进行必要的修改,然后将数据网格绑定到表视图。

这里有一些vb.net代码,如果有帮助(我不知道C#,对不起):

        Dim listTable As DataView = New DataView(list) 'list is the data collection
        dgvList.DataSource = listTable   'dgvList is the data grid