0

我有一个dataGridView,它是绑定到某些的数据generic List<T>(而 T 是一些具有属性的自定义类)。问题是其中一个属性是 的类型integer,它代表分钟。将 List 绑定到 dataGridView 后,我希望该列默认显示小时,而不是分钟。

如何改变某些列的行为,使用一些数学来显示一些不同的值?

我必须在DataGridView.CellFormating活动中这样做吗?

4

1 回答 1

1

您有两个选择,第一个是操作您的Generic List<T>第一个,这应该比使用第二个选项更快,遍历每个RowDataBound Event.

  • 使用RowDataBound事件

    protected void gridview1_RowDataBound(object sender, GridViewRowEventArgs e) { if (e.Row.RowType == DataControlRowType.DataRow) { int minutes = int.Parse(e.Row.Cells[YourColumnIndex].Text); 小数小时 = 分钟 / 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.
        }
    }
}
于 2013-02-04T18:13:16.400 回答