我有一个dataGridView
,它是绑定到某些的数据generic List<T>
(而 T 是一些具有属性的自定义类)。问题是其中一个属性是 的类型integer
,它代表分钟。将 List 绑定到 dataGridView 后,我希望该列默认显示小时,而不是分钟。
如何改变某些列的行为,使用一些数学来显示一些不同的值?
我必须在DataGridView.CellFormating
活动中这样做吗?
我有一个dataGridView
,它是绑定到某些的数据generic List<T>
(而 T 是一些具有属性的自定义类)。问题是其中一个属性是 的类型integer
,它代表分钟。将 List 绑定到 dataGridView 后,我希望该列默认显示小时,而不是分钟。
如何改变某些列的行为,使用一些数学来显示一些不同的值?
我必须在DataGridView.CellFormating
活动中这样做吗?
您有两个选择,第一个是操作您的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.
}
}
}