【问题标题】:C# help to set a Row Css class of a Grid ViewC# 帮助设置网格视图的行 Css 类
【发布时间】:2010-01-15 18:54:55
【问题描述】:

我需要在网格中交替行颜色,但不是每隔一行。我有一个可以检查 GridRowBound 事件的变量 _AddDate。如果它没有改变,我想申请一个 css 类,如果有,我想申请一个不同的类。我拥有的代码几乎完全符合我的要求,但是当值更改时,我在行上设置类,并且应该是同一类的每个并发行都应用了不正确的类。我的方法肯定有问题。谁能指出我正确的方向?这些类型的功能也有名称。我必须时不时地做这样的事情,他们可能很难找出正确的算法。这是我所拥有的。

 private void GridRowBound(object sender, GridViewRowEventArgs e)
    {
        if(e.Row.RowType == DataControlRowType.DataRow)
        {
            e.Row.CssClass = SetRowColor();

        }
    }

    private DateTime _dateToSwitch;

    private string SetRowColor()
    {

        var tmpDate = _AddDate;
        var doSwitch = (tmpDate == _dateToSwitch);
        if (!doSwitch)
        {
            _dateToSwitch = tmpDate;
            return "commentRow";
        }
         return "altCommentRow";



    }

我有另一个函数可以正确地将 _AddDate 设置为适当的值,因此在评估时它始终是最新的。

感谢任何帮助。周五快乐!

干杯, ~ck 在圣地亚哥

【问题讨论】:

    标签: c# asp.net algorithm data-binding


    【解决方案1】:

    除此之外(目前)我想不出更优雅的方法:

    private DateTime _previousRowDateTime;
    private string[] _commentRowClasses = {"commentRow", "altCommentRow"};
    private int _commentRowClassesIndex = 0;
    
    private string SetRowColor()
    {
      if( _AddDate != _previousRowDateTime ) 
      {
        _commentRowClassesIndex = ( _commentRowClassesIndex + 1 ) % 2;
        _previousRowDateTime = _AddDate;
      }
      return _commentRowClasses[_commentRowClassesIndex];
    }
    

    【讨论】:

    • 甚至不编译。您不能将 DateTime 设置为 null,也不能只让 _previousRowDate 坐在那里而不做任何事情。尽管如此,我认为 mod% 的使用是我所需要的。谢谢。 ~ck
    • 对不起,我打字很快,没有通过编译器运行它。我更关心的是首先传达这个概念。
    • 伙计,我仍然无法让它工作。我认为 mod 是要走的路,但这个实现是不正确的。它说如果它们相等,请将它们设置为相等,这对我来说似乎不对。我在这里想念什么?它们最初不相等,因此索引永远不会更新。
    • 再次抱歉。我认为这只是检查不相等而不是相等的问题:“如果_AddDate和_previousRowDateTime不一样,则推送索引并记录新的上一行日期时间。如果它们相等,则返回数组的当前索引。”是的,我认为应该这样做。
    • 这很有意义。感谢您的帮助。
    【解决方案2】:

    你的代码在说什么:

    If the last date stored is NOT equal to the "_AddDate" variable
        then SET it to that and return that this is a "commentRow".
    
    If the last date stored IS equal to the "_AddDate" variable
        then simply return "altCommentRow".
    

    因此,在 _AddDate 未更改且具有相同日期的 2 个连续行上,第一个将获得“commentRow”样式,第二个将获得“altCommentRow”。

    如果您的目标是轮换颜色,以便所有具有相同日期的连续行都是一种颜色,那么,当到达新日期时,切换到下一种颜色,您可以尝试这样的操作:

    private bool _AltFlag;
    private string _PreviousDate;
    
    private string SetRowColor()
    {
        if (_AddDate != _PreviousDate)
        {
            _AltFlag = !_AltFlag;
        }
    
        return _AltFlag ? "altCommentRow" : "commentRow";
    }
    

    本质上,我们设置了一个布尔值来告诉我们当前正在使用哪些类。如果我们当前的日期与前一个日期不同,则翻转标志并返回新类。如果相同,我们保持相同的标志并返回类。

    【讨论】:

    • 您似乎忘记添加“_PreviousDate = _AddDate;”在 if(...) 语句中
    • 是的,需要在 if 中设置日期才能使其正常工作。谢谢!
    猜你喜欢
    • 1970-01-01
    • 2011-01-31
    • 2018-06-28
    • 2015-08-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多