0

これは、dataGridViewいくつかにバインドされたデータですgeneric List<T>(Tはプロパティを持つカスタムクラスです)。問題は、プロパティの 1 つが のタイプでinteger、分を表していることです。List を dataGridView にバインドした後、列にデフォルトで分ではなく時間を表示したいと思います。

一部の列の動作を変更する方法、それに対していくつかの数学を使用して少し異なる値を表示する方法は?

DataGridView.CellFormatingイベントでこれをしなければなりませんか?

4

1 に答える 1

1

2 つのオプションがあります。最初のオプションは、最初のオプションを操作することです。Generic List<T>これは、2 番目のオプションを使用するよりも高速で、それぞれのリストを反復処理します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); 10 進数の時間 = 分 / 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 に答える