2013-02-04 12 views
0

나는 generic List<T>에 바인딩 된 데이터 인 dataGridView을 가지고 있습니다 (T는 속성이있는 사용자 정의 클래스 임). 문제는 속성 중 하나가 integer 유형이며 분을 나타냅니다. 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] .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> 

업데이트 : 윈도우 응용 프로그램이 양식에 대한 질문, 그리고 업데이트으로 난 창문 양식을 사용하고 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

사용한다. –

+0

@MitjaBonca - ops! 그런 다음 업데이트 된 답변을 확인하십시오. – MuhammadHani

관련 문제