2013-08-20 47 views
1

我有一個asp.net網頁,有兩個下拉列表和一個gridview。基於兩個下拉列表填充gridview

這兩個下拉列表基於對SQL數據庫(2008R2)的查詢。下拉菜單填充很好。

我需要做的是根據下拉列表中的選項創建網格視圖。

第一個下拉允許用戶選擇作業名稱 - 而這是對用戶有幫助,我需要的是與該作業名相關的作業#。第二個下拉是一個非常直接的階段(三個選擇)。

現在我有基於SQL中的主表的網格視圖,但我只需要顯示相關的結果。我可以基於過濾器來做到這一點,但用戶通常不知道工作號碼。

這裏是爲GridView的數據源:

SELECT a.[Annotation Number], a.Page_ID, a.[Annotation By], a.[Annotation Type], 
a.[Business Unit], a.[Actual Agency Error], a.[Error Type], a.[Annotation Comments], 
a.[Team Comments], a.sgkComments 
FROM MasterAnnotation AS a 
INNER JOIN ActiveWorkPages AS b 
ON a.Page_ID = b.WorkPage INNER JOIN ActiveJob AS c ON c.Job = b.Job 
ORDER BY a. [Annotation Number] 

我想我可以做的就是添加兩個變量到數據源通過限制它在那裏B.JOB = @Job和舞臺= @Stage

據我所知,我需要autopostback爲了更新gridview。
我還需要根據客戶端輸入(項目的下一個階段)更新gridview的某些列。

在此先感謝您的幫助。

+0

增加兩個變量爲數據源,以限制它不工作? –

回答

1

您可以通過下拉列表更改或通過單擊按鈕調用類似的內容。 (不知道如何你配置有)

//import and add the System.Data.SqlClient Namespace 
using System.Data.SqlClient; 


try //Try block for opening, querying and displaying pulled data 
      { 
      sqlConn.Open(); 
      cmdstring = "Select col1, col2, col3 from tablename where field 1 = '" + ddllist1.selecteditem.value+ "' and field2 = '" + ddllist2.selecteditem.value + "'"; 
      sqlcmd01 = new SqlCommand(cmdstring, sqlConn); 
      reader01 = sqlcmd01.ExecuteReader(); 
      //set the datasource and bind it to the gridview 
      gridview01.DataSource = reader01; 
      gridview01.DataBind(); 
      sqlConn.Close(); 
     } 
     catch (Exception ex) 
     { 
      //handle Errors 
     } //End Try Catch for SQL Operations 

這應該選擇的值形成的表,除非你的GridView已經配置不同自動assingn列名。

字符串附加的SQL查詢probally不理想,但就是我多麼有我的樣塊設置:)

編輯 你需要讓你的聲明如下

//Declare Globally or where you need 
     SqlConnection sqlConn = new SqlConnection("ConnString"); //Connection String 
     SqlDataReader reader01 = null; //DataReader 
       SqlCommand sqlcmd01 = null; 
       String cmdstring = ""; 

EDIT 2 我的GridView聲明如下(大部分是默認值)。我正在使用的示例使用.ascx文件格式化頁面。你的情況是相似的。

<asp:GridView ID="gridview01" runat="server" CellPadding="4" 
    EnableModelValidation="True" ForeColor="#333333" GridLines="None" 
    Height="179px" Width="496px" style="margin-right: 0px"> 
    <AlternatingRowStyle BackColor="White" /> 
    <EditRowStyle BackColor="#2461BF" /> 
    <FooterStyle BackColor="#507CD1" Font-Bold="True" ForeColor="White" /> 
    <HeaderStyle BackColor="#507CD1" Font-Bold="True" ForeColor="White" /> 
    <PagerStyle BackColor="#2461BF" ForeColor="White" HorizontalAlign="Center" /> 
    <RowStyle BackColor="#EFF3FB" HorizontalAlign="Center" /> 
    <SelectedRowStyle BackColor="#D1DDF1" Font-Bold="True" ForeColor="#333333" /> 
</asp:GridView> 
+0

我正在爲cmdstring,sqlcmd01,reader01獲取CS0103錯誤,指出它們不存在於當前上下文中。我需要在某些方面將這些變量聲明爲變量嗎?另外,我稍微改變了cmdstring。我添加了cmd.Parameters.AddWithValue(「@ Stage」,dlStage.SelectedItem.Value),然後調用@Stage而不是ddllist1.selecteditem.value。這應該將所有內容都保存爲單個字符串。我不確定它是否工作,因爲我無法編譯,直到找出變量問題。我不確定是否有asp的聲明函數。想法? –

+0

@Tim Vavra是的,他們都需要申報。我編輯過。 – sealz

+0

我把這裏列出的代碼,但我沒有得到gridview。我有相同的代碼附加到這兩個下拉列表,當任何更改沒有影響。 gridview配置了一個附加的數據源。應該建立沒有數據源? –

2

這裏有幾個細節會讓你朝正確的方向發展。

使用作業ID作爲填充下拉作業時的選項值。這將顯示作業名稱,但將持有作業標識的背景

這裏是如何從代碼中做到這一點,但如果你使用的SqlDataSource或類似的東西,你也可以做到這一點從設計師。

string sql = "select job_name, job_id from dbo.jobs"; 

using (SqlConnection conn = new SqlConnection("your conneciton string")) 
{ 
    using (SqlCommand cmd = new SqlCommand(sql, conn)) 
    { 
     SqlDataAdapter adapter = new SqlDataAdapter(cmd); 
     DataSet data = new DataSet(); 
     adapter.Fill(data); 

     ddlJobs.DataSource = data; 
     ddlJobs.DataTextField = "job_name"; 
     ddlJobs.DataValueField = "job_id"; 
     ddlJobs.DataBind(); 
    } 
} 

一旦你有了這個,你可以將參數傳遞給用來填充gridview,然後刷新。想法是在網格視圖中使用SelectedValue屬性。

​​3210

此外,當選擇指數一定要設置AutoPostBack屬性在下拉列表爲True和事件處理程序改變

<asp:DropDownList ID="ddlJobs" runat="server" AutoPostBack="true" OnSelectedIndexChanged="ddlJobs_OnSelectedIndexChanged"> 
     </asp:DropDownList>