2013-02-04 31 views
0

我有一個dataGridView,這是數據綁定到一些generic List<T>(而T是一些具有屬性的自定義類)。 問題是,其中一個屬性是integer類型,它代表了分鐘。 將List綁定到dataGridView之後,我希望該列顯示小時數,而不是默認分鐘數。如何更改列值以顯示綁定DataGridView中的不同值?

如何更改某些列的行爲,使用它的一些數學來顯示有點不同的值?

我必須在DataGridView.CellFormating事件中執行此操作嗎?

回答

1

您有兩種選擇,第一種是首先操縱Generic List<T>,這應該比使用第二種選擇更快,通過遍歷每個RowDataBound Event上的列表。

  • 使用RowDataBound事件

    保護無效gridview1_RowDataBound(對象發件人,GridViewRowEventArgs E) { 如果(e.Row.RowType == DataControlRowType.DataRow) { INT分鐘= INT。解析(e.Row.Cells [YourColumnIndex]。文本); 十進制小時=分鐘/ 60;
    e.Row.Cells [YourColumnIndex] .Text = hours.ToString(); }}

  • 使用Evel表達

ASPX頁面

<asp:TemplateField HeaderText="Time"> 
      <ItemTemplate> 
        <%# ConvertToHours(Eval("Minutes"))%> 
      </ItemTemplate> 
</asp:TemplateField> 

代碼隱藏

private string ConvertToHours(object objMin) 
{ 
    if (Convert.ToInt32(objMin) == 1) 
    { 
     return (int.Parse(objMin)/60).ToString(); 
    } 
    else 
    { 
     return "0"; 
    } 
} 

另一種方法。 - 全力以赴。

<asp:TemplateField HeaderText="Time"> 
<ItemTemplate> 
<asp:Label ID="lblTime" runat="server" Text='<%# Convert.ToInt32(Eval("Time")) Convert.ToInt32("60")%>'></asp:Label> 
</ItemTemplate> 
</asp:TemplateField> 

更新:作爲問題更新,那麼對於Windows窗體應用程序,你應該DataGridView.CellFormatting Event

private void dataGridView1_CellFormatting(object sender, DataGridViewCellFormattingEventArgs e) 
{ 
    // If the column is the Time column, check the 
    // value. 
    if (this.dataGridView1.Columns[e.ColumnIndex].Name == "Time") 
    { 
     if (e.Value != null) 
     { 
      //Your implementation. 
     } 
    } 
} 
+0

我使用的是windows窗體使用。 –

+0

@MitjaBonca - ops!然後檢查更新的答案。 – MuhammadHani

相關問題