2009-07-16 2 views
0

asp.net 2.0에서 GridView를 사용하고 있으며 인라인 편집을 수행하려고합니다. 객체 데이터 소스를 사용하고 있습니다. 내 gridview의 정수 필드에 대한 유효성 검사 컨트롤을 사용하려면 <TemplateFields>으로 만들고 데이터 형식 유효성 검사기와 범위 유효성 검사기를 추가했습니다. 이렇게하면 공백 필드 나 0에서 999 사이의 정수 값을 가질 수 있습니다.ASP.NET - GridView - EditItem - 정수의 Null 값은 무엇입니까?

속성 값이 정의되지 않은 경우 "-"를 표시하려고합니다. 정수에는 Null이 없으므로 Null을 나타내는 값으로 -1을 사용하기로 결정했습니다.

값이 -1 인 경우 "-"표시로 다시 포맷 중입니다.

<ItemTemplate> 
    <asp:Label ID="lblPC" runat="server" Text='<%# FormatIntegerToText(Eval("PitchCount"),"-") %>'></asp:Label> 
</ItemTemplate> 

을 코드에서 다음과 같이 내가 함수 FormatIntegerToText을 정의한 뒤에 : 나는 다음과 같이 그렇게

Protected Function FormatIntegerToText(ByVal value As Object, ByVal nullvalue As String) As String 
     ' Make sure value is not null... if so, return "-" 
     If value = Null.NullInteger() Then 
      Return nullvalue 
     Else 
      Return value.ToString() 
     End If 
End Function 

이 모든 잘 작동합니다. 나는 현재 내 <EditItemTemplate>

<EditItemTemplate> 
    <asp:textbox ID="txtPC" runat="server" Text='<%# Bind("PitchCount") %>' width="25" Columns="2"></asp:textbox> 
    ....a couple of validators.... 
</EditItemTemplate> 
으로 이것을 가지고 -1

이제 문제는 내가 내 편집 버튼을 클릭하면 ... 제공의 <EditItem>는하지만 모든 "NULL"값 (텍스트 상자 등으로) 표시가 표시됩니다

는 그래도 난 내가 텍스트 상자에 배치되는 값 포맷 다음을 수행 할 수 :

<EditItemTemplate> 
    <asp:textbox ID="txtPC" runat="server" Text='<%# FormatIntegerToText(Bind("PitchCount")) %>' width="25" Columns="2"></asp:textbox> 

을하지만이 작업을 수행 할 때 나는 바인딩은 인식 기능 아니라고 컴파일 오류가 발생합니다.

내 질문은 이것이 허용되지 않는 이유는 무엇이며 어떻게 해결할 수 있습니까?

답변

0

이렇게하는 것이 좋습니다. 바운드 열을 사용하는 대신 내용을 완전히 제어 할 수있는 템플릿 열을 만들고 표시 중에 텍스트 서식을 지정하는 함수를 작성하고 편집시 내용을 적절한 값으로 설정합니다.

0

바인딩은 실제로 함수가 아니므로 컴파일 오류가 발생합니다. 자세한 내용은 Eilon Lipton's Blog입니다.

바인딩을 평가로 바꾸어보십시오.

또한의 RowUpdating 이벤트 처리기에서 새 값을 저장해야합니다 :

protected void GridView1_RowUpdating(object sender, GridViewUpdateEventArgs e) 
{ 
    e.NewValues["PitchCount"] = 
     ((TextBox)((GridView)sender).Rows[e.RowIndex].FindControl("txtPC")).Text; 
} 

또 다른 방법은 nullable type을 사용하는 것입니다. 정수 대신 Nullable(Of Integer)을 사용하십시오. 그런 다음 NullDisplayText property을 사용하여 NULL 대신 "-"를 표시하십시오.

<asp:BoundField DataField="PitchCount" NullDisplayText="-" HeaderText="PitchCount" 
    SortExpression="PitchCount />