2011-10-05 41 views
0

HiI有一个绑定到数据库中的表的列表框。它会生成一个公司名单。然后,用户会前来选择他们想要查看信息的多家公司,然后他们点击一个selet按钮,该按钮在下面的gridview中显示公司信息(例如公司名称,公司网站,地址e.t.c)。然而,我所面临的问题是,它只显示多个公司中的一家,而且它始终是最高的一家。带多选列表框的gridview

有人可以请说明我如何让所有的公司在GridView中显示?

我在vb.net编程

请参阅下面的源代码

<asp:ListBox ID="ListBox1" runat="server" 
     DataSourceID="SqlDataSource11" DataTextField="compName" 
     DataValueField="compDataID" SelectionMode="Multiple" AutoPostBack="True"></asp:ListBox> 
    <asp:SqlDataSource ID="SqlDataSource11" runat="server" 
     ConnectionString="<%$ ConnectionStrings:IWSRiskAssessmentConnectionString %>" 
     SelectCommand="SELECT [compDataID], [compName] FROM [tblCompany] WHERE ([compDataID] &lt;&gt; @compDataID) ORDER BY [compName]"> 
     <SelectParameters> 
      <asp:ControlParameter ControlID="DropDownList1" Name="compDataID" 
       PropertyName="SelectedValue" Type="Int32" /> 
     </SelectParameters> 
    </asp:SqlDataSource> 
<asp:GridView 
     ID="GridView1" runat="server" AllowPaging="True" AutoGenerateColumns="False" 
     DataSourceID="SqlDataSource2"> 
     <Columns> 
      <asp:BoundField DataField="compName" HeaderText="compName" 
       SortExpression="compName" /> 
      <asp:BoundField DataField="Site Name" HeaderText="Site Name" 
       SortExpression="Site Name" /> 
      <asp:BoundField DataField="Reference Number" HeaderText="Reference Number" 
       SortExpression="Reference Number" /> 
      <asp:BoundField DataField="Asset" HeaderText="Asset" ReadOnly="True" 
       SortExpression="Asset" /> 
      <asp:BoundField DataField="Location" HeaderText="Location" 
       SortExpression="Location" /> 
      <asp:BoundField DataField="Block" HeaderText="Block" SortExpression="Block" /> 
      <asp:BoundField DataField="Room" HeaderText="Room" SortExpression="Room" /> 
     </Columns> 
    </asp:GridView> 
    <asp:SqlDataSource ID="SqlDataSource2" runat="server" 
     ConnectionString="<%$ ConnectionStrings:IWSRiskAssessmentConnectionString %>" 
     SelectCommand="SELECT tblCompany.compName, tblSite.siteName AS [Site Name], tblSite.siteUPRN AS [Reference Number], tblIncMain.incAsset + ' ' + CAST(tblIncMain.incNumber AS varchar) AS Asset, tblIncMain.incLocation AS Location, tblIncMain.incBlock AS Block, tblIncMain.incRoom AS Room FROM tblIncMain INNER JOIN tblSite ON tblIncMain.incSite = tblSite.siteID INNER JOIN tblCompany ON tblSite.siteCompany = tblCompany.compDataID WHERE (tblIncMain.incActive = 1) AND (tblSite.siteActive = 1) AND (tblIncMain.incRemoved = 0) AND (tblCompany.compDataID = @compDataID) ORDER BY [Site Name], tblIncMain.incAsset, tblIncMain.incNumber"> 
     <SelectParameters> 
      <asp:ControlParameter ControlID="ListBox1" Name="compDataID" 
       PropertyName="SelectedValue" /> 
     </SelectParameters> 
    </asp:SqlDataSource> 

这是源代码:-)请看一看任何帮助感激

+0

你应该提供SORCE码,否则我们不会看到有什么问题。你在哪里以及如何将GridView绑定到它的DataSource? –

+0

我的问题已被编辑,我已经添加源代码感谢 – Reidy0588

回答

0

五月DataBind代码在每个请求上执行,或者您没有从列表框中收集选定的项目。

Sub page_load() 
    if Not IsPostBack Then 

    End If 
    End sub 

和迭代列表框项目,

For Each item in ListBox1.Items 
    if item.Selected then 
    End If 
Next 
+0

约第二块代码去哪里? – Reidy0588

0

您的数据源只选择1个记录。当您使用多选ListBox作为ControlParameter时,ListBox将返回第一个值。

(tblCompany.compDataID = @compDataID) 

你想要做的是有与IN的语句,如

(tblCompany.compDataID in @compData) 

您可能需要在代码中做一些背后的东西。

<asp:ListBox ID="ListBox1" runat="server" 
     AutoPostBack="True" 
     DataTextField="compName" 
     DataSourceID="SqlDataSource11" 
     DataValueField="compDataID" 
     OnSelectedIndexChanged="ListBox1_SelectedIndexChanged" 
     SelectionMode="Multiple"> 
</asp:ListBox> 

代码背后

protected void ListBox1_SelectedIndexChanged(object sender, EventArgs e) 
{ 
    string s = string.Empty; 
    foreach (ListItem li in ListBox1.Items) 
    { 
    if (li.Selected == true) 
     s += li.Value + ","; 
    } 

    if (s != string.Empty) 
    { 
    s = s.Substring(0, s.Length - 2); // chop off trailing , 
    SqlDataSource2.SelectParameters["compData"].DefaultValue = s; 
    } 
} 

注意这还没有经过测试,但它是一个选项,你可以试试。基本上你想IN而不是=为您的选择获得所有结果。

+0

嗨非常感谢这一点,但是当我试图从列表框中选择一家公司,我得到这个错误 '@compDataID'附近的语法不正确 – Reidy0588

+0

很难说没有看到你的源代码是什么问题。这听起来像是SQL查询中有错误。解决这个问题的最好方法是打印出最终的sql语句并查看错​​误的位置。 – Kirk

0

行,所以我增加了“在”我的SQL语句,但它仍然只从列表框中而不是多个这样的SQL语句拿起一个选择:

SELECT tblCompany.compName, tblSite.siteName AS [Site Name], tblSite.siteUPRN AS [Reference Number], tblIncMain.incAsset + " " + CAST(tblIncMain.incNumber AS varchar) AS Asset, tblIncMain.incLocation AS Location, tblIncMain.incBlock AS Block, tblIncMain.incRoom AS Room FROM tblIncMain INNER JOIN tblSite ON tblIncMain.incSite = tblSite.siteID INNER JOIN tblCompany ON tblSite.siteCompany = tblCompany.compDataID WHERE (tblIncMain.incActive = 1) AND (tblSite.siteActive = 1) AND (tblIncMain.incRemoved = 0) AND tblCompany.compDataID in(@compDataID) ORDER BY [Site Name], tblIncMain.incAsset, tblIncMain.incNumber