簡體   English   中英

Convert.ToDateTime DD:HH:mm:ss C#/ ASP.net GridView RowDataBound

[英]Convert.ToDateTime DD:HH:mm:ss C#/ASP.net GridView RowDataBound

我的問題的基礎是為ASP.net Grid View控件中的單元格着色。 我在SQL中有一個由此產生的綁定字段

 RIGHT('0' + CONVERT(varchar(6), SUM([Coaching]) / 86400), 2) + ':' + RIGHT('0' + CONVERT(varchar(6), SUM([Coaching]) % 86400 / 3600), 2) + ':' + RIGHT('0' + CONVERT(varchar(2), SUM([Coaching]) % 3600 / 60), 2) + ':' + RIGHT('0' + CONVERT(varchar(2), SUM([Coaching]) % 60), 2) 

與我一起工作不是很好,但是我說過的Project規則必須以DD:HH:MM:SS的格式顯示。

話雖這么說,但我試圖在C#中執行行數據綁定事件,以在單元格超過某一分鍾時為單元格着色

    protected void TheGrid_RowDataBound(object sender, GridViewRowEventArgs e)
{
    //this is where we will color the columns

    if (e.Row.RowType == DataControlRowType.DataRow)
    {
        int CoachingIndex = GetColumnIndexByName(e.Row, "Coaching");
        DateTime CoachingValue = Convert.ToDateTime(e.Row.Cells[CoachingIndex].Text);
        string columnValue = ((Label)e.Row.FindControl("Coaching")).Text;
        if (Convert.ToDateTime(DataBinder.Eval(e.Row.DataItem, columnValue)) > Convert.ToDateTime("00:00:40:00"))
        {
            e.Row.Cells[CoachingIndex].BackColor = System.Drawing.Color.Red;
        }            
    }
}
int GetColumnIndexByName(GridViewRow row, string columnName)
{
    int columnIndex = 0;
    foreach (DataControlFieldCell cell in row.Cells)
    {
        if (cell.ContainingField is BoundField)
            if (((BoundField)cell.ContainingField).DataField.Equals(columnName))
                break;
        columnIndex++; // keep adding 1 while we don't have the correct name
    }
    return columnIndex;
}

如果(Convert.ToDateTime(DataBinder.Eval(e.Row.DataItem, columnValue)) > Convert.ToDateTime("00:00:40:00"))這樣的轉換只是問題所在,只是試圖弄清楚如何獲取這可以在C#中工作,所以我可以進行比較。

任何幫助將不勝感激。

感謝您在提供的所有信息使它能夠正常工作之后,今天能夠為您提供的所有幫助。

 if (e.Row.RowType == DataControlRowType.DataRow)
    {

        int CoachingIndex = GetColumnIndexByName(e.Row, "Coaching");   
        TimeSpan timeStamp;
        string timeStampString = e.Row.Cells[CoachingIndex].Text; // just change the index of cells to get the correct timestamp field
        if (TimeSpan.TryParse(timeStampString, out timeStamp))
        {
            TimeSpan TS = timeStamp;
            int mins = TS.Minutes;
            int hours = TS.Hours;
            int days = TS.Days;
            if (mins > 40 || hours >= 1 || days >= 1)
            {
                e.Row.Cells[CoachingIndex].BackColor = System.Drawing.Color.Red;                    
            }
        }            
    }
}
int GetColumnIndexByName(GridViewRow row, string columnName)
{
    int columnIndex = 0;
    foreach (DataControlFieldCell cell in row.Cells)
    {
        if (cell.ContainingField is BoundField)
            if (((BoundField)cell.ContainingField).DataField.Equals(columnName))
                break;
        columnIndex++; // keep adding 1 while we don't have the correct name
    }
    return columnIndex;
}  

在解析日期時,嘗試使用像這樣的通用安全功能:

public DateTime? GetSafeDateTimeValue(object datetimeValue)
        {
            if (datetimeValue == null || datetimeValue == DBNull.Value)
                return null;
            else
            {
                try
                {
                    if (!DateTime.TryParse(datetimeValue.ToString(), out tempDateTimeValue))
                        return null;
                    else
                        return tempDateTimeValue;
                }
                catch
                {
                    return null;
                }
            }
        }

然后用

DateTime? dt = GetSafeDateTimeValue((DataBinder.Eval(e.Row.DataItem, columnValue)));
if(dt.HasValue)
 if (dt.Value > Convert.ToDateTime("00:00:40:00"))

您將面臨的第二個問題是,日期時間解析器必須期望年份,而不是像下面這樣解析帶datetime實例的datetime字符串:

DateTime comparedDt = new DateTime(2014, 03, 10, 00, 40, 00);

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM