2010-03-25 5 views
5

내 데이터 소스 (ObjectDataSource)의 멤버로 int? MyProperty 속성이 있습니다. 내가nullable int를 asp에 바인딩 : TextBox

<asp:TextBox ID="MyTextBox" runat="server" Text='<%# Bind("MyProperty") %>' /> 

처럼 텍스트 상자에이 바인딩 할 수 있습니다 기본적으로 나는 텍스트 상자에 빈 ""로 표시되는 null 값 및 숫자로 번호를 얻으려면. TextBox가 비어있는 경우 MyPropertynull으로 설정해야합니다. TextBox에 숫자가 있으면 MyProperty를이 숫자로 설정해야합니다.

시도해보십시오. "공백은 유효한 Int32가 아닙니다."라는 예외가 발생합니다.

하지만 어떻게 할 수 있습니까? nullable 속성을 사용하고 바인딩하는 방법?

미리 감사드립니다.

답변

1
<asp:TextBox ID="MyTextBox" runat="server" 

Text='<%# Bind("MyProperty").HasValue ? Bind("MyProperty") : "" %>' /> 

HasValue를 사용하여 Null 허용 유형이 null인지 확인한 다음 Text 속성을 설정할 수 있습니다.

+2

답장을 보내 주셔서 감사합니다. 그러나 이것은 전혀 작동하지 않으며 심지어 컴파일되지 않습니다. 그것은 Eval (적어도 Eval의 리턴을 int로 캐스팅 한 후에 작동합니까?)하지만 Bind는 완전히 다른 이야기입니다. – Slauma

2

nullable 값 속성을 바인딩 할 수 없다고 생각하기 시작했습니다.

public int? MyProperty { get; set; } 

public string MyBindableProperty 
{ 
    get 
    { 
     if (MyProperty.HasValue) 
      return string.Format("{0}", MyProperty); 
     else 
      return string.Empty; 
    } 

    set 
    { 
     if (string.IsNullOrEmpty(value)) 
      MyProperty = null; 
     else 
      MyProperty = int.Parse(value); 
      // value should be validated before to be an int 
    } 
} 

하고 대신 원래의 텍스트 상자에 도우미 속성을 바인딩 : 나는 '

<asp:TextBox ID="MyTextBox" runat="server" 
    Text='<%# Bind("MyBindableProperty") %>' /> 

지금 틸 나는 단지 nullable 형식을 결합하기 위해 추가 도우미 속성을 추가 할 해결 방법을 볼 수 있습니다 다른 해결책을 발견하게되어 기쁩니다.

+0

이것은 데이터 소스가'EntityDataSource' 인'FormView' 안에서는 작동하지 않습니다.'DataBinding을 얻었습니다 : 'System.Web.UI.WebControls.EntityDataSourceWrapper'는 'MyBindableProperty'라는 이름의 속성을 가지고 있지 않습니다. ' – Rich

4

그러나 FormView가 포함 된 솔루션을 찾았습니다. 시나리오에 맞는 지 여부는 지정하지 않았습니다.

어쨌든 DataBound-ed 엔티티는 내 자신의 것입니다 (중요하지는 않습니다). 트릭을 사용하면 formview를 업데이트 할 때 본질적으로 pre-databound 이벤트에 연결해야만합니다.

protected void myFormView_Updating(object sender, FormViewUpdateEventArgs e) 
{ 
    if (string.Empty.Equals(e.NewValues["MyProperty"])) 
     e.NewValues["MyProperty"] = null; 
} 

유사 삽입

protected void myFormView_Inserting(object sender, FormViewInsertEventArgs e) 
{ 
    if (string.Empty.Equals(e.Values["MyProperty"])) 
     e.Values["MyProperty"] = null; 
} 

에 무슨 일이 정말 재미가있다한다 : 프레임 워크는 속성이 구성 객체에 값을 삽입 할 수 있도록 널 (null) 값으로 빈 문자열을 기입의 그 사실 e 오류 메시지 (유효한 Int32가 아님)는 실제로 잘못되었으며 쓸 수 있어야합니다 (유효한 Nullable이 아니어야 함)하지만 nullables는 일급 시민이었을 것입니까?

관련 문제