2011-08-30 4 views
0

데이터 바인딩 된 컨트롤의 값을 가져 오는 최선의 방법을 찾고 있습니다. 내 응용 프로그램이 현재 작동하는 방식 (일반적으로)은 페이지로드 중입니다. getSettings() 등을 호출하고 각 DropDownLists 또는 Repeater에 대해 데이터베이스 호출을 만듭니다.데이터베이스 호출이없는 데이터를 페이지로드시 바인딩합니다.

이 특정 경우에는 어떤 단추를 클릭했는지에 따라 DropDownList에 데이터를 바인딩합니다. 앱이 데이터베이스로 이동하면서 필요한 정보를 얻는 동안 데이터가 표시되기까지 약간의 지연이 있습니다.

페이지를로드 할 때마다 데이터베이스 호출을하지 않고 값을 가져 오는 것이 더 좋은 방법인지 궁금합니다. 단지 몇 가지 예제 코드를 포함 시켰습니다.

에서 .aspx :

<asp:DropDownList ID="ddl" runat="server"></asp:DropDownList> 
<asp:Button ID="btn1" runat="server" OnCommand="btn_Command" CommandName="change" CommandArgument="table1" /> 
<asp:Button ID="btn2" runat="server" OnCommand="btn_Command" CommandName="change" CommandArgument="table2" /> 
<asp:Button ID="btn3" runat="server" OnCommand="btn_Command" CommandName="change" CommandArgument="table3" /> 
<asp:Button ID="btn4" runat="server" OnCommand="btn_Command" CommandName="change" CommandArgument="table4" /> 

코드 숨김 :

DBClass dbc = new DBClass(); 

protected void btn_Command (object sender, CommandEventArgs e){ 
    if (e.CommandName == "change"){ 
     ddl.DataSource = dbc.ExecuteQuery("SELECT * FROM " + e.CommandArgument); 
     ddl.DataTextField = "Text"; 
     ddl.DataValueField = "Value"; 
     ddl.DataBind(); 
    } 
} 

결과를 캐시 할 수있는 방법이 있습니까? 나는 이것이 하나의 DropDownList이기 때문에 이것이 거친다는 것을 안다. 그러나 각 버튼에 하나가 있더라도 4 개의 데이터베이스 호출을하지 않고 데이터를 얻을 수있는 방법이 있는가?

미리 감사드립니다.

답변

0

jQuery ajax를 사용하여이 작업을 수행하는 방법을 찾았습니다. 단추 클라이언트 쪽을 클릭하면 일부 HTML 서버 쪽에서 WebMethod의 형식으로 필요한 값을 뱉어냅니다. 조금 더 작업하지만 모든 포스트 백을 제거하고 필요하지 않거나 사용할 포스트 백을로드합니다.

감사합니다.

+0

내가 한 일을하고 싶습니다. 아내가 도움이되는지 검토하십시오. http://stackoverflow.com/q/11151806/1321748 –

0

단순히이 값을 응용 프로그램 변수에 저장하고 Application_Startup에서 한 번만 검색 할 수 있습니다. Microsoft에서 몇 가지 간단한 예를 참조하십시오.

Global.asax에 여러 결과 집합을 반환하는 쿼리를 변경하고 데이터 집합으로 결과를 채울 수

protected void btn_Command (object sender, CommandEventArgs e) 
{ 
    if (e.CommandName == "change") 
    { 
     ddl.DataSource = Application[e.CommandArgument] as IEnumerable<TResult>; 
     ddl.DataTextField = "Text"; 
     ddl.DataValueField = "Value"; 
     ddl.DataBind(); 
    } 
} 
0

protected void Application_Start(object sender, EventArgs e) 
{ 
    DBClass dbc = new DBClass(); 
    Application["table1"] = dbc.ExecuteQuery<TResult>("SELECT * FROM table1"); 
    Application["table2"] = dbc.ExecuteQuery<TResult>("SELECT * FROM table2"); 
    // ... 
} 

숨김. DataSet이로드되면 DataSet의 각 DataTable을 해당 DropDown에 바인딩 할 수 있습니다.

결과를 캐시하거나 필요할 경우 응용 프로그램 상태로 둘 수 있습니다. 그래도 여전히 쿼리를 병합하는 방법을 살펴 보겠습니다.

관련 문제