gridview с множественным выбором списка - PullRequest
0 голосов
/ 05 октября 2011

Привет, у меня есть список, связанный с таблицей в базе данных. это производит список компаний. Затем пользователь придет и выберет несколько компаний, информацию о которых он хочет просмотреть, а затем он нажмет кнопку выбора, которая плохо отображает информацию о компании (например, название компании, сайт компании, адрес e.t.c) в виде сетки внизу. Однако проблема, с которой я столкнулся, заключается в том, что он отображает только ОДНУ из нескольких выбранных компаний и всегда является самой верхней.

Может кто-нибудь пролить свет на то, как я могу отобразить все компании в сетке?

я программирую на 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>

это исходный код :-), пожалуйста, посмотрите, и любая помощь очень ценится

Ответы [ 3 ]

0 голосов
/ 05 октября 2011

Ваш источник данных выбирает только 1 запись. ListBox вернет первое значение, если вы используете множественный выбор ListBox как ControlParameter.

(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 голосов
/ 06 октября 2011

хорошо, поэтому я добавил 'in' в свой оператор 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
0 голосов
/ 05 октября 2011

Может быть, код 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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...