2011-08-11 6 views
0

ASP.NET에서 SqlDataSource 컨트롤을 사용하는 검색 엔진을 사용하여 매개 변수가있는 저장 프로 시저에서 데이터를 가져옵니다. 페이지의 기본값과 컨트롤에서 매개 변수를 가져와 사용자가 원하는 것을 얻을 수 있습니다. 그 데이터는 GridView 컨트롤에 표시됩니다.SQLDataReader와 컨트롤의 값을 페이지에서 사용합니다.

이제 내보내기 버튼을 추가해야합니다. 내보내기 버튼을 추가하면 사용자가 다운로드 할 수있는 Excel 문서로 결과가 내보내집니다. 나는 그것이 최선의 방법인지 잘 모르겠다. 그러나 나는 마이크로 소프트 (http://support.microsoft.com/default.aspx?scid=kb;en-us;308247)의 알고리즘을 사용했다. 문제는 검색 필드의 값을 가져 오려고 시도했을 때 발생했습니다. 보시다시피, 우리는 이것을 템플릿으로 사용합니다. 우리는 할 수있는 검색 엔진이 12 개 정도 있기 때문에 우리는 동적으로 작동하는 것을 가지고 싶습니다. 여기

은 영문 페이지에서 SqlDataSource 컨트롤의 exemple의 :

<asp:SqlDataSource ID="SearchDataSource" runat="server" 
    ConnectionString="CONNECTIONSTRING" 
    ProviderName="System.Data.SqlClient" 
    SelectCommand="sp_SearchEngine_BASE" 
    SelectCommandType="StoredProcedure" onselected="SearchDataSource_Selected"> 
    <SelectParameters> 
     <asp:ControlParameter ControlID="ctlID1" DbType="SomeType" DefaultValue="" 
      Name="spParamA" PropertyName="aProperty" /> 
     <asp:ControlParameter ControlID="ctlID2" DbType="SomeType" DefaultValue="" 
      Name="spParamB" PropertyName="aProperty" /> 
    </SelectParameters> 
</asp:SqlDataSource> 

을 그리고 여기에 수출 코드 : 그것은 동적 할 필요가 있기 때문에

protected void exportExcel() 
    { 
     int i; 
     String strLine = "", filePath, fileName, fileExcel; 
     FileStream objFileStream; 
     StreamWriter objStreamWriter; 
     Random nRandom = new Random(DateTime.Now.Millisecond); 
     //Dim fs As Object, myFile As Object 
     SqlConnection cnn = new SqlConnection(SearchDataSource.ConnectionString); 

     //Create a pseudo-random file name. 
     fileExcel = "t" + nRandom.Next().ToString() + ".xls"; 

     //Set a virtual folder to save the file. 
     //Make sure that you change the application name to match your folder. 
     filePath = Server.MapPath("\\ExcelTest"); 
     fileName = filePath + "\\" + fileExcel; 

     //Use FileStream to create the .xls file. 
     objFileStream = new FileStream(fileName, FileMode.OpenOrCreate, FileAccess.Write); 
     objStreamWriter = new StreamWriter(objFileStream); 

     //Use a DataReader to connect to the Pubs database. 
     cnn.Open(); 
     String sql = SearchDataSource.SelectCommand; 
     SqlCommand cmd = new SqlCommand(sql, cnn); 

     //cmd.Parameters.Add(SearchDataSource.SelectParameters[0].); 
     for (i = 0; i <= SearchDataSource.SelectParameters.Count - 1; i++) 
     { 
      // --------------------------------------- 
      // ----- Here is where I am stuck... ----- 
      // --------------------------------------- 
      //cmd.Parameters.AddWithValue(SearchDataSource.SelectParameters[i].Name, WhatDoIPutHere); 
     } 

     SqlDataReader dr; 
     dr = cmd.ExecuteReader(); 

     //Enumerate the field names and records that are used to build the file. 
     for(i = 0; i <= dr.FieldCount - 1; i++) { 
      strLine = strLine + dr.GetName(i).ToString() + "\t"; 
     } 

     //Write the field name information to file. 
     objStreamWriter.WriteLine(strLine); 

     //Reinitialize the string for data. 
     strLine = ""; 

     //Enumerate the database that is used to populate the file. 
     while (dr.Read()) { 
      for(i = 0; i<= dr.FieldCount - 1; i++) { 
       strLine = strLine + dr.GetValue(i) + "\t"; 
      } 

      objStreamWriter.WriteLine(strLine); 
      strLine = ""; 
     } 

     //Clean up. 
     dr.Close(); 
     cnn.Close(); 
     objStreamWriter.Close(); 
     objFileStream.Close(); 
     /* 
     //Show a link to the Excel file. 
     HyperLink1.Text = "Open Excel"; 
     HyperLink1.NavigateUrl = fileExcel; 
     */ 
    } 

, 수출 코드가 작동에 필요 어떤SqlDataSource 컨트롤에 사용됩니다. 따라서 더 많은 매개 변수, 다른 연결 문자열 또는 그와 비슷한 것이 있으면 여전히 작동해야합니다. 다른 엔진의 코드로 변경하면 안됩니다.

그래서 여기에 질문입니다 : 는 어떻게는 C# 사용자 정의 메소드 void exportExcel()SqlDataReader dr에 대한 매개 변수로 SqlDataSource SearchDataSource에서 사용하는 컨트롤의 값이 컨트롤 'ID를 하드 코딩없이 내 영문 페이지에 링크받을 수 있나요?

이 같은

답변

0

뭔가 작업을해야 :

for(int i = 0; i < SearcDataSource.SelectParameters.Count; i++) 
{ 
    string controlId= (ControlParameter)SearchDataSource.SelectParameters[i].ControlID; 
} 

너무로 여기에서 할 싶어 수 있으며, 널 (null) 확인 :

for(int i = 0; i < SearcDataSource.SelectParameters.Count; i++) 
{ 
    var controlParam = SearchDataSource.SelectParameters[i] as ControlParameter; 
    if (controlParam == null) continue; 
    string controlId= controlParam.ControlID; 
} 

다음을 사용하여 ControlParameter 개체를 평가하는 데 필요한 값을 얻으려면 Evaluate 메서드 : http://msdn.microsoft.com/en-us/library/system.web.ui.webcontrols.controlparameter.evaluate.aspx

+0

나는 당신이 질문의 일부를 놓치고 있다고 생각합니다. 어떻게 가치를 얻을 수 있습니까? – JMichelB

+0

값을 얻으려면 Evaluate 메서드를 사용하여 ControlParameter 개체를 평가해야합니다. http://msdn.microsoft.com/en-us/library/system.web.ui.webcontrols.controlparameter.evaluate.aspx – Josh

+0

나는 ' 'Evaluate'을 사용하는 방법을 찾지 마십시오! MSDN은 예제를 제공하지 않으며 VS는 다음 중 하나를 도울 수 없습니다 ... 링크를 제공하기 위해 업데이트했습니다. 귀하의 예제도 업데이트하지 않은 이유는 무엇입니까? – JMichelB

관련 문제