根据两个下拉列表填充gridview

时间:2013-08-20 20:19:17

标签: asp.net sql-server

我有一个带有两个下拉列表和一个gridview的asp.net网页。

这两个下拉列表基于对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 = @Stage

我知道我需要自动回复才能更新gridview 我还需要根据客户端输入(项目的下一阶段)更新某些列的gridview

提前感谢您的帮助。

2 个答案:

答案 0 :(得分:2)

以下是一些可以帮助您找到正确方向的细节。

在填充作业下拉列表时使用作业ID作为选项值。这将显示作业名称,但它将在后台保存作业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属性。

string sql = "select * from table where job_id = @job_id";

using (SqlConnection conn = new SqlConnection("your conneciton string"))
{
      using (SqlCommand cmd = new SqlCommand(sql, conn))
     {
           cmd.Parameters.Add(new SqlParameter("@job_id", ddlJobs.SelectedValue));
           SqlDataAdapter adapter = new SqlDataAdapter(cmd);
           DataSet data = new DataSet();
           adapter.Fill(data);

           gridView.DataSource = data;
           gridView.DataBind();
     }
}

还要确保将下拉列表中的AutoPostback属性设置为True,并在选定的索引更改时将事件处理程序设置为

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

答案 1 :(得分: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已经配置不同。

SQL查询附加的字符串在概率上并不理想,但这就是我设置样本块的方式:)

修改 您需要按如下方式进行声明

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

编辑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>