Maideen Abdul Kader Ответов: 1

Как загрузить данные в представление сетки с помощью флажка множественный выбор в ASP.NET -что ?


Привет
У меня есть проблема
У меня есть 2 списка флажков, заполненных данными из базы данных. Это прекрасно
Один-промышленность, другой-отдел

Если я выберу множественный выбор из списка флажков,
мне нужно загрузить данные в управление видом сетки на основе выбора.

тег HTML
<div class="col-lg-3">
    <asp:Label ID="Label1" runat="server" Text="Industry" ForeColor="Red" Font-Bold="true"></asp:Label>
    <div style="width:230px;height:300px; padding:1px; overflow:auto; border: 1px solid #ccc;">
        <asp:CheckBoxList ID="chkIndustry" runat="server" CssClass="form-control-lst" RepeatLayout="table"
                RepeatColumns="1" RepeatDirection="vertical"></asp:CheckBoxList>
    </div>
</div>

<div class="col-lg-3">
    <asp:Label ID="Label2" runat="server" Text="Department" ForeColor="Red" Font-Bold="true"></asp:Label>
    <div style="width:230px;height:300px; padding:1px; overflow:auto; border: 1px solid #ccc;">
        <asp:CheckBoxList ID="chkDepartment" runat="server" CssClass="form-control-lst" RepeatLayout="table"
                RepeatColumns="1" RepeatDirection="vertical"></asp:CheckBoxList>
    </div>
</div>

   <asp:GridView ID="GridView1" runat="server" CssClass="gridview" AutoGenerateColumns="False" BackColor="White" BorderColor="#CCCCCC" BorderStyle="None"
        BorderWidth="1px" CellPadding="3" PageSize="15">
        <Columns>
            <asp:CommandField ShowSelectButton="True">
                <ItemStyle Width="50px" />
            </asp:CommandField>

            <asp:TemplateField ShowHeader="False">

                <HeaderTemplate>
                    <asp:CheckBox ID="allchk"  runat="server" />
                </HeaderTemplate>

                <ItemTemplate><asp:CheckBox ID="chk" runat="server" /></ItemTemplate>
                <ItemStyle Width="10px" />
            </asp:TemplateField>
            <asp:BoundField DataField="Code" HeaderText="Code" />
            <asp:BoundField DataField="name" HeaderText="CoName"  />
            <asp:BoundField DataField="industry" HeaderText="Industry"  />
            <asp:BoundField DataField="NAMED" HeaderText="Delegate"  />
            <asp:BoundField DataField="status" HeaderText="Status"  />


        </Columns>
        <FooterStyle BackColor="White" ForeColor="#000066" />
        <HeaderStyle BackColor="#006699" Font-Bold="True" ForeColor="White" />
        <PagerStyle BackColor="White" ForeColor="#000066" HorizontalAlign="Left" />
        <RowStyle ForeColor="#000066" />
        <SelectedRowStyle BackColor="#669999" Font-Bold="True" ForeColor="White" />
        <SortedAscendingCellStyle BackColor="#F1F1F1" />
        <SortedAscendingHeaderStyle BackColor="#007DBB" />
        <SortedDescendingCellStyle BackColor="#CAC9C9" />
        <SortedDescendingHeaderStyle BackColor="#00547E" />
    </asp:GridView>


Public Function LoadParamDetails_CHK(chkList As CheckBoxList, strParamHead As String) As String
      LoadParamDetails_CHK = String.Empty
      Dim sConstr As String = ConfigurationManager.ConnectionStrings("ConnectString").ConnectionString
      Dim Conn As New SqlConnection(sConstr)
      Using Conn
          Dim command As New SqlCommand("Select * from Parameter where paramhead ='" & strParamHead & "' order by paramdetails", Conn)
          Dim da As New SqlDataAdapter()
          Dim dt As New DataTable()
          command.CommandType = CommandType.Text
          Conn.Open()
          da.SelectCommand = command
          da.Fill(dt)
          chkList.DataSource = dt
          chkList.DataValueField = "id"
          chkList.DataTextField = "paramdetails"
          chkList.DataBind()
      End Using
      Conn = Nothing
      Return LoadParamDetails_CHK
  End Function

вызов функции
LoadParamDetails_CHK(Me.chkIndustry, "industry")
LoadParamDetails_CHK(Me.chkDepartment, "department")


Я использовал попробовать этот код. Он заполнен только одной отраслью, хотя я выбрал несколько отраслей, а также я не знаю, как добавить выбранный отдел в этот код из списка флажков отдела
Private Sub LoadSelectDelegate()
    For i As Integer = 0 To Me.chkIndustry.Items.Count - 1
        If Me.chkIndustry.Items(i).Selected = True Then
            Dim query As String = "select * from vw_Client_HD where industry = '" + Me.chkIndustry.Items(i).Text + "'"

            Dim dt As DataTable = GetData(query)
            Me.GridView1.DataSource = dt
            Me.GridView1.DataBind()
        End If

    Next

Пожалуйста, посоветуйте мне.

спасибо Мейден

Что я уже пробовал:

Private Sub LoadSelectDelegate()
    For i As Integer = 0 To Me.chkIndustry.Items.Count - 1
        If Me.chkIndustry.Items(i).Selected = True Then
            Dim query As String = "select * from vw_Client_HD where industry = '" + Me.chkIndustry.Items(i).Text + "'"

            Dim dt As DataTable = GetData(query)
            Me.GridView1.DataSource = dt
            Me.GridView1.DataBind()
        End If

    Next

1 Ответов

Рейтинг:
11

Maciej Los

Прежде всего, ваш код таков: SQL-инъекция[^] уязвимый!

Как избежать Sql-инъекции? Пожалуйста, прочтите это:
Как: защита от SQL-инъекций в ASP.NET[^]
Атака SQL-инъекций – исследование безопасности и защита[^]
SQL-инъекция и как ее избежать – ASP.NET отладка[^]
Написание безопасного динамического SQL в SQL Server | Microsoft Docs[^]

Совет: используйте сохраняемые процедуры[^] чтобы получить ваши данные!
Как вызвать хранимые процедуры SQL Server в ASP.NET с помощью Visual Basic .NET[^]
Как выполнить хранимую процедуру, возвращающую строки[^]

Что касается этого заявления:

Цитата:
Я использовал попробовать этот код. Он заполнен только одной отраслью, хотя я выбрал несколько отраслей, а также я не знаю, как добавить выбранный отдел в этот код из списка флажков отдела

Private Sub LoadSelectDelegate()
    For i As Integer = 0 To Me.chkIndustry.Items.Count - 1
        If Me.chkIndustry.Items(i).Selected = True Then
            Dim query As String = "select * from vw_Client_HD where industry = '" + Me.chkIndustry.Items(i).Text + "'"

            Dim dt As DataTable = GetData(query)
            Me.GridView1.DataSource = dt
            Me.GridView1.DataBind()
        End If
    Next



Представьте себе, на каждом шагу for... next цикл, вы переопределяете предыдущий результат. ;)
Если я вас правильно понял, вы хотите получить список отраслей, название которых соответствует выбранному значению (или значениям).
Итак, вам нужно использовать IN (Transact-SQL) | Microsoft Docs[^]
SELECT *
FROM vw_Client_HD
WHERE industry IN ('industry1', 'industry2', 'industry3')


Чтобы добиться этого, вы должны передать список отраслей в виде текста с разделителями в хранимую процедуру sql. Внутри этой процедуры вы должны разделить разделенный текст на значения. Видеть: Преобразование данных, разделенных запятыми в столбце, в строки для выбора[^]