我有一个带有两个下拉列表和一个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
提前感谢您的帮助。
答案 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>