2016-09-10 2 views
2

을 사용하여 SQL Server 데이터베이스의 Null 값을 업데이트하지 않습니다. Winforms C# 응용 프로그램에서 데이터 형식이 Int 인 SQL Server 데이터베이스 (null 허용)의 Null 값을 허용하도록 설정되어 있습니다.Winform의 Int 필드가 C#

양식에 나는 텍스트 상자이 있는데, 이들은 int 데이터 유형 필드에 바인딩되어 있습니다. 새 레코드를 만드는 동안 아무 것도 입력하지 않으면 받아들입니다. 텍스트 상자에 숫자를 입력하면도 받아 들여지며 삭제하면 더 이상 허용되지 않고 다음 필드로 이동하지 못합니다.

값을 null로 설정하거나 코드를 통해 ""으로 설정하면 다른 비 int 텍스트 필드에서 변경 한 내용을 무시하고 단순히 업데이트하지 않습니다.

다음과 같은 방법으로 업데이트하고 있습니다.

this.Validate(); 
this.itemsbindingSource.EndEdit(); 
this.tableAdapterManager.UpdateAll(this.sBSDBDataSet); 

나는 널 (null) 값을 허용하는 텍스트 상자을 위해 무엇을 할 수 있습니까?

다음과 같이 시도해 보았습니다.

IDTextBox.Text = ""; 
IDTextBox.Text = null; 
+0

당신이'itemsBindingSource'에 대한'DataSource'로 무엇을 사용하고 있습니다 : 다음

public static class ControlExtensions { public static void FixTextBoxBindings(this Control control) { if (control is TextBox) { foreach (Binding binding in control.DataBindings) if (binding.NullValue == null) binding.NullValue = ""; } foreach (Control child in control.Controls) child.FixTextBoxBindings(); } } 

을하고 단순히 Load 이벤트 양식에 다음과 같습니다? –

+0

DataSource는 'sBSDBDataSet'입니다. – ammar

+2

하지만'sBSDBDataSet'은 무엇입니까?우리가 당신의 코드를 가지고 있지 않다는 것을 기억하십시오, 질문을보십시오, 이것은 우리가 보는 모든 것입니다. –

답변

2

이것은 WF 데이터 바인딩 버그 중 하나 인 것으로 보입니다. 정확히 무엇을 일으키는 지 말할 수는 없지만 작동 시키려면 Binding.NullValue 속성을 ""(빈 문자열, 기본값은 null)으로 설정해야합니다.

나는 디자이너에서 그렇게 할 수있는 방법을 찾지 못했고 필요한 모든 텍스트 상자를 찾으려면 매우 짜증났습니다. 그래서 나는 당신에게 다음과 같은 빠르고 더러운 접근법을 제안 할 것이다. 이런 도우미 메서드 만들기 :

this.FixTextBoxBindings(); 
+1

완벽하게 작동합니다! – ammar

0

TextBox는 null 값을 허용하지 않습니다.

null인지 확인하고 String.Empty를 설정할 수 있습니다.

If(dbValue == null) 
{ 
    IDTextBox.Text = String.Empty; 
} 
else 
{ 
    // here set value to your textbox 
} 
+0

안녕하세요 mwisnicki. 나는 이것에 2 개의 과실을 얻고있다. 1. dbValue-> dbValue 이름이 현재 컨텍스트에 없습니다. 2. String.Empty() -> 비 호출 멤버 'String.Empty'는 메서드처럼 사용할 수 없습니다. 내가 놓친 게 있니? – ammar

+0

"dbValue"는 텍스트 상자에 설정하려고하는 변수입니다. null을 텍스트 상자로 설정할 수 없으므로 빈 문자열 인 경우 null을 검사해야합니다. –

+0

안녕하세요. 나는 이것을 시도했지만 여전히 효과가 없다. var dbValue = (문자열) null; if (dbValue == null) { IDTextBox.Text = String.Empty; } else { // } – ammar

1

위의 해결 방법 (특히 Ivan 씨)의 도움을 받아 다음과 같이 시도해 보았습니다. 씨 이반에 의해 제안 내가 'IDtextbox.DataBindings.Add'검색 및

교체, 형태의 Designer.cs 파일에 다음

IDTextBox.Text = String.Empty; 

:

양식에 INT 필드를 지우려면 ,

this.IDTextBox.DataBindings.Add(new System.Windows.Forms.Binding("Text", this.itemsbindingSource, "PictureID", true, System.Windows.Forms.DataSourceUpdateMode.OnValidation, "")); 

this.IDTextBox.DataBindings.Add(new System.Windows.Forms.Binding("Text", this.itemsbindingSource, "PictureID", true)); 

그것은 검색 나에게 하루 종일했다 마침내 나는 여기에 내 문제를 게시 1 시간 만에 풀렸다.