2015-04-09 6 views
2

у меня есть Gridview и Datasource, как это:Как я могу сравнить дату двух строк

<asp:SqlDataSource ID="SqlDataSource10" runat="server" 
     ConnectionString="<%$ ConnectionStrings:ConnectionString %>" 
     ProviderName="<%$ ConnectionStrings:ConnectionString.ProviderName %>" 
     SelectCommand="SELECT * FROM [data.csv]"></asp:SqlDataSource> 

    <asp:GridView ID="GridView3" runat="server" AutoGenerateColumns="False" 
     BackColor="White" BorderColor="#999999" BorderStyle="None" BorderWidth="1px" 
     CellPadding="3" DataSourceID="SqlDataSource10" GridLines="Vertical" 
     Width="695px" Height="130px" onrowdatabound="GridView3_RowDataBound"> 
     <AlternatingRowStyle BackColor="#DCDCDC" /> 
     <Columns> 
      <asp:BoundField DataField="H" HeaderText="H" 
       SortExpression="H" > 
      <HeaderStyle Width="115px" /> 
      </asp:BoundField> 
      <asp:BoundField DataField="V" HeaderText="V" 
       SortExpression="V" > 
      <HeaderStyle Width="100px" /> 
      </asp:BoundField> 
      <asp:BoundField DataField="F" HeaderText="F" 
       SortExpression="F" dataformatstring="{0:dd-MM-yyyy HH:mm}" > 
      <HeaderStyle Width="180px" /> 
      </asp:BoundField> 
      <asp:BoundField DataField="V" HeaderText="V" 
       SortExpression="V" dataformatstring="{0:dd.MM.yyyy HH:mm}" > 
      <HeaderStyle Width="180px" /> 
      </asp:BoundField> 

я использую CSV файл данных. Я должен изменить backcolor, если значение даты старое (2 часа).

я могу сделать это для первого столбца даты, как это:

DateTime dt; 
    if (DateTime.TryParseExact(e.Row.Cells[1].Text, "dd.MM.YYYY HH:mm", 
         CultureInfo.InvariantCulture, 
         DateTimeStyles.None, out dt)) 
{ 
    if (dt <= DateTime.Now.AddHours(-2)) 
    { 
     if (e.Row.Cells[0].Text.Contains("M")) 
     { 
      e.Row.Cells[1].BackColor = Color.LightCoral; 
     } 
    } 

Если первый столбец значений даты старше чем на 2 часа, BackColor меняется.

Мне нужно сделать это для столбца 2. даты. Но сравните с первым значением даты. Если второе значение даты старше 2-х часов, в соответствии с первым значением даты, BackColor изменения:

enter image description here

Как я могу это сделать?

ответ

2

Вы можете использовать класс TimeSpan для расчета разницы между датой. Вы можете сделать это событие OnRowDataBound см ниже

 protected void GridView1_RowDataBound(object sender, GridViewRowEventArgs e) 
     { 

      //Checking the RowType of the Row 
      if (e.Row.RowType == DataControlRowType.DataRow) 
      { 
       DateTime firstDateValue = Convert.ToDateTime(e.Row.Cells[1].Text); 
       DateTime secondDateValue = Convert.ToDateTime(e.Row.Cells[2].Text); 

       TimeSpan timespan = secondDateValue - firstDateValue; 

       if (timespan.Hours > 2) 
       { 
        e.Row.BackColor = Color.Cyan; 
       } 
      } 
     } 
+0

Как я могу использовать для GridView строк? – phe

+0

@Ric Я отредактировал ответ, пожалуйста, проверьте, помогает ли он. – Bayeni

+0

Спасибо, это работа для меня. Но когда значения даты, подобные этому (Час и мин. 00), не работают: '09.09.2015 00: 00'. Как я могу это исправить? – phe

2

Вы можете поместить это, когда вы заселить ваш DataGridView

int index = dataGridView1.Rows.Add(); 
     dataGridView1.Rows[index].Cells[colFirstDate.Name].Value = DateTime.Now; 
     dataGridView1.Rows[index].Cells[colSecondDate.Name].Value = DateTime.Now.AddHours(3); 

     DateTime firstDate = Convert.ToDateTime(dataGridView1.Rows[index].Cells[colFirstDate.Name].Value); 
     DateTime secondDate = Convert.ToDateTime(dataGridView1.Rows[index].Cells[colSecondDate.Name].Value); 
     TimeSpan timespan = secondDate - firstDate; 

     if (timespan.Hours > 2) 
     { 
      dataGridView1.Rows[index].Cells[colFirstDate.Name].Style.BackColor = Color.Gray; 
     } 
Смежные вопросы