2011-02-13 6 views
4

SQL 데이터베이스에 레코드를 추가/삭제할 수있는 양식을 만들었습니다. 레코드를 추가 할 때 양식을 새로 고치고 모든 레코드가있는 목록 상자에 새로 추가 된 레코드가 포함되도록하고 싶습니다.C#에서 양식을 새로 고치는 방법은 무엇입니까?

나는 이것을 봤고 폼을 새로 고침하기 위해 새 스레드가 권장되었음을 알았지 만 지침은 나와 같은 초보자에게는 충분하지 않았습니다.

도움을 주시면 감사하겠습니다.

미리 감사드립니다.

편집 :이 앱은 asp가 아닌 C#을 사용하는 데스크톱 앱입니다.

일부 컨트롤은 내가 실행 한 마법사로 채워지고 일부는 직접 데이터 소스를 코딩했습니다.

namespace LomWindows 
{ 
    public partial class Form1 : Form 
    { 
     SqlConnection myConnection; 

     public Form1() 
     { 
      InitializeComponent(); 
      myConnection = new SqlConnection(global::LomWindows.Properties.Settings.Default.esConnectionString); 
      tConnStr.Text = global::LomWindows.Properties.Settings.Default.esConnectionString; 

      try 
      { 
       myConnection.Open(); 
      } 
      catch (Exception ex) 
      { 
       Console.WriteLine(ex.ToString()); 
      } 
     } 

     private void button1_Click(object sender, EventArgs e) 
     { 
      string sqlComm = "INSERT INTO ES_TOOL ...."; 

      try 
      { 
       myCommand.ExecuteNonQuery(); 
      } 
      catch (Exception exce) 
      { 
       Console.WriteLine(exce.ToString()); 
      } 

      try 
      { 
       myConnection.Close(); 
      } 
      catch (Exception exc) 
      { 
       Console.WriteLine(exc.ToString()); 
      } 

      InitializeComponent(); 
      MessageBox.Show("Tool Added"); 
      this.Invalidate(); 
     } 
    } 
} 
+3

이는 ASP.NET 또는 데스크톱 응용 프로그램입니다 : 여기 시작하는 링크가있어? –

+0

목록 상자 및 데이터베이스에 레코드를 추가하는 방법을 보여줄 수 있습니까? 데이터 바인딩을 사용합니까? 아니면 너 혼자하는거야? 코드, 제발! –

답변

2

추가/수정/삭제 후에 컨트롤을 다시 리 바인드 할 수 있습니다. 그러면 컨트롤이 업데이트 된 데이터로 다시로드됩니다.

+0

양식을 다시로드하는 쉬운 방법은 없습니까? 내 복잡한 형식으로는 데이터베이스에 링크 된 여러 컨트롤이 있습니다 (내 코드 - 마법사가 아닙니다). 분명히 this.repaint() 라인을 따라이 작업을 수행하는 간단한 명령이 있어야합니다. – Meir

+0

데이브, 코드를 보여줄 수 있습니까? –

+1

내 코드는 여기에 게시하기에는 너무 큽니다. 그러나 위의 관련 비트를 편집으로 게시합니다. – Meir

1

윈폼 다음 커버 MSDN에서 좋은 기사를 통해이

: Give Your .NET-based Application a Fast and Responsive UI with Multiple Threads가.

창을 다시 그리려면 Invalidate 메서드를 호출 할 수 있습니다. 그러나 당신이 컨트롤을 재 바인딩 할 때; 새 데이터 소스를 설정하면 해당 데이터 소스의 내용이 업데이트됩니다.

다음은 WinForms를 시청할 때 유용한 비디오입니다 : "How Do I Videos" from WindowsClient.net. Build More Responsive Apps With The Dispatcher : 여기 WPF

취재 윈폼에있는 것과 일치하는 문서이다.

Herer는 WindowsClient.net의 "How Do I Videos"과 같은 WPF를 시청할 때 유용한 비디오입니다.

당신이 jQuery를와 Ajax를 살펴 고려해 할 수 있습니다 더 반응 webbapps을 만들려면

ASP.NET. 그런 다음 웹 사이트의 새 부분을 요청하고 이전 부분을 교체 할 수 있습니다.

그러나 포스트 백을 수행하고 목록 상자에 항목을 추가하려는 경우 ListBox에서 DataBind을 호출하면 데이터 소스의 항목을 다시 바인딩해야합니다.

+0

레코드 추가 끝에 this.invalidate()를 추가하려고 시도했다. 버튼 (버튼을 클릭하여 실행), 비공개 무효 button1_Click (개체 발신자, EventArgs e). 아무것도하지 않는 것 같았습니다. – Meir

+0

@Dave, 당신은 데이터베이스에서 ListBox를 다시 가져 와서'.DataSource'를 사용하여 다시 바인딩해야합니다. –

+0

나는 당신이 무슨 뜻인지 정말로 모르겠다. 몇 가지 코드를 보여 주시겠습니까? – Meir

0

는 ASP.NET은 다음과 같은 코드를 사용하여 자체로 리디렉션하여 양식을 새로 고칠 수 있다면 : 그것은 Windows 응용 프로그램의 경우

Response.Redirect(Request.RawRul); 

을, 당신은 데이터 소스 속성을 설정하여 목록 상자 컨트롤을 리 바인드해야 다시.

0

ListBox에서 이미 Invalidate을 호출하는 경우 디버그 문을 Paint 메서드에 추가하여 실제로 다시 칠할 수 있습니다. 그렇다면 Paint이 항목을 그리는 데 필요한 상태를 가져 오는 위치를 조사해야합니다. Paint 안에 데이터베이스를 쿼리합니까? (내가하지 희망.) 아니면 형태가 어딘가에서 그 상태를 기억하고 있습니까? 이 경우 메모리 내 상태를 데이터베이스와 일관되게 유지해야합니다.

0

행이 추가/삭제/업데이트 될 때마다 모든 행을 다시로드 할 때의 성능 영향을 생각해 보셨습니까? IMHO, 전체 데이터를 다시로드하는 것은 사용자를 괴롭 히고 대역폭 사용을 증가시킵니다. 대신 각 데이터 행에 대해 POCO 객체를 만듭니다. BackgroundWorker 구성 요소에서 수행 한 (성공적인) CRUD 작업이있을 때마다 DataSource에 추가하고 DataBind으로 전화하십시오.

BackgroundWorker을 사용하는 방법에 대한 자세한 내용은 this을 참조하십시오.

+0

흥미로운 점이 있습니다. 지금이 프로젝트는 꽤 규모가 작고 쉬운 일입니다. 하지만 기회가 생겼을 때 나는 POCO에 대해 확실히 읽을 것입니다. – Meir

+0

@Dave 그럼 왜 별도의 스레드가 필요합니까? 단지 주 스레드 자체에서 CRUD를 수행하고, (특정 컨트롤의) DataSource와 DataBind를 새로 고칩니다. – Mayank

1

기본 질문은 실제로 Winforms repaints에 관한 것이 아니라 Winform 컨트롤이 바인딩 된 데이터 소스를 새로 고치는 방법 또는 데이터베이스가 변경된 후 바인딩되지 않은 모드로 컨트롤이 수동으로 채워지는 방법입니다 귀하의 클라이언트 응용 프로그램.

데이터 모델을 만들지 않는 한 데이터 원본 개체는 DML 문이 어딘가에 명령에 의해 실행될 때 데이터가 변경되었음을 알 수 없습니다. 그것은 모두 "묶여 있어야"합니다. ADO.NET은 '연결이 끊긴 레코드 세트'모델을 사용합니다. ADO.NET 데이터 계층 개체는 데이터 입출력 및 데이터 오류와 관련된 이벤트를 발생 시키므로 리스너/이벤트 처리기를 연결해야합니다. 이러한 이벤트 핸들러는 차례로 프레젠테이션 계층 코드를 호출해야합니다.

현재 명령 개체로 표면을 긁어 모으고 있습니다. 가장 좋은 방법은 이벤트 핸들러를 ADO.NET 이벤트 모델에 연결하는 방법을 보여주는 책 중 하나를 읽는 것입니다.

편집 : http://msdn.microsoft.com/en-us/library/w9y9a401.aspx

관련 문제