2017-01-22 65 views
1

我有一个名为ddlSvcEngr的下拉列表从数据源获取值。我希望gridview根据从ddlSvcEngr中选择的数据库显示结果。但每次我点击视图按钮都不会出现gridview。下面的代码:ASP.NET GridView在按钮单击后不出现

HTML:

<asp:DropDownList ID="ddlSvcEngr" runat="server" DataSourceID="SqlDataSource1" DataTextField="rep_svcengr" DataValueField="rep_svcengr" CssClass="btn btn-default dropdown-toggle" Width="300px" AppendDataBoundItems="true">  
<asp:Button ID="btnView" runat="server" Text="View" CssClass="btn btn-primary" Width="300px" OnClick="btnView_Click" /> 
<asp:GridView ID="gvResults" runat="server" AutoGenerateColumns="False" ShowFooter="True"> 
      <Columns> 
       <asp:BoundField ItemStyle-Width="150px" DataField="rep_svcengr" HeaderText="Service Engineer" > 
        <ItemStyle Width="150px"></ItemStyle> 
      </Columns> 
</asp:GridView> 
<asp:SqlDataSource ID="SqlDataSource1" runat="server" ConnectionString="<%$ ConnectionStrings:jasonsvcConnectionString %>" SelectCommand="SELECT [rep_svcengr], [rep_company], [rep_vessel], [rep_wo], [rep_brand], [rep_model], [rep_eqpt], [rep_sn] FROM [reports]"></asp:SqlDataSource> 

代码背后:

private void bgSvcEngr() 
    { 
     string conString = ConfigurationManager.ConnectionStrings["jasonsvcConnectionString"].ConnectionString; 
     string query = "SELECT rep_svcengr,rep_company,rep_vessel,rep_wo,rep_brand,rep_model,rep_eqpt,rep_sn FROM reports WHERE rep_svcengr='@svcengr'"; 
     SqlCommand cmd = new SqlCommand(query); 
     cmd.Parameters.AddWithValue("@svcengr", ddlSvcEngr.SelectedItem.Value); 
     using (SqlConnection con = new SqlConnection(conString)) 
     { 
      using (SqlDataAdapter sda = new SqlDataAdapter()) 
      { 
       cmd.Connection = con; 
       sda.SelectCommand = cmd; 
       using (DataSet ds = new DataSet()) 
       { 
        sda.Fill(ds); 
        gvResults.DataSource = ds; 
        gvResults.DataBind(); 
       } 
      } 
     } 
    } 

protected void btnView_Click(object sender, EventArgs e) 
    {    
      bgSvcEngr(); 
    } 

注:每次我删除命令查询行WHERE rep_svcengr='" + ddlSvcEngr.SelectedIndex.ToString() + "'。 gridview出现在点击View按钮后。

我不知道为什么每次我把WHERE命令放到查询中时gridview都不会出现什么问题。

+0

'AddWithValue()'可能是有问题的。用显式类型添加参数更好。 –

+0

您选中了数据库中正在运行的查询吗?你会得到记录? –

+0

@MuhammadSaqlain是的。我没有检查来自同一查询的记录。它显示了表格。 @GordonLinoff甚至没有使用'AddWithValue()'没有gridview出现。 从我的笔记中,只要我从查询中删除'where'语法就会显示'report'表中的所有数据。 –

回答

0

摆脱单引号的:

替换:

WHERE rep_svcengr='@svcengr' 

有了:

WHERE [email protected] 

enter image description here

public partial class WebForm1 : System.Web.UI.Page 
{ 
    protected void Button1_Click(object sender, EventArgs e) 
    { 
     SelectByColor(); 
    } 
    private void SelectByColor() 
    { 
     string conString = ConfigurationManager.ConnectionStrings["AdventureWorks2014ConnectionString"].ConnectionString; 
     string query = "SELECT productid, name, color FROM production.product WHERE [email protected]"; 
     SqlCommand cmd = new SqlCommand(query); 
     cmd.Parameters.AddWithValue("@pcolor", DropDownList1.SelectedItem.Value); 
     using (SqlConnection con = new SqlConnection(conString)) 
     { 
      using (SqlDataAdapter sda = new SqlDataAdapter()) 
      { 
       cmd.Connection = con; 
       sda.SelectCommand = cmd; 
       using (DataSet ds = new DataSet()) 
       { 
        sda.Fill(ds); 
        GridView1.DataSource = ds; 
        GridView1.DataBind(); 
       } 
      } 
     } 
    } 
}