Привязка данных к сетке с помощью начальной загрузки мульти выбора при раскрытии вниз вместе со списком, выбранным в обмене - PullRequest
0 голосов
/ 07 июля 2019

У меня есть Asp.net Gridview и элемент управления Listbox, использующий множественный выбор Bootstrap. Когда пользователь выбирает элементы из списка и закрывает раскрывающийся список (именно тогда выбранные значения могут быть собраны в связку), функция загрузки Gridview будет принимать значения выбора пользователя, выполнять и выполнять привязку данных. Я хотел бы использовать Asp Gridview для детализации функциональности. Я также не хочу использовать событие кнопки, чтобы прочитать значение списка и выполнить привязку базы данных gridview

-На событии ondropdownhide Bootstrap Multiselect я установил значение скрытого поля для нескольких выбранных значений, таких как (1,2,3). - Затем я установил событие onselectedindexchange в Listbox на стороне сервера, чтобы прочитать значение скрытого поля и выполнить хранимую процедуру, которая снова заполнит сетку.

 <asp:ListBox ID="ListBox1" runat="server" 
          DataTextField="DbValueDesc" 
          DataValueField="DbValue" 
          Autopostback="True" 
          SelectionMode="Multiple" 
          Width="584px" 
          OnSelectedIndexChanged="ListBox1_SelectedIndexChanged">
      </asp:ListBox>
        <asp:ScriptManager ID="ScriptManager1" runat="server">
 </asp:ScriptManager>


<asp:GridView ID="gvReport" runat="server" 
                DataKeyNames ="record_id"
                AutoGenerateColumns="False"
                >        
              <Columns>
            <asp:CommandField ShowSelectButton="True" 
SelectText="ShowDetails" />
            <asp:BoundField DataField="item_reportname" 
HeaderText="Report Name" 
                SortExpression="item_reportname" />
            <asp:BoundField DataField="item_reportlocation" 
 HeaderText="Report Location" 
                SortExpression="item_reportlocation" />
</asp:GridView>


<script type="text/javascript">
 $(document).ready(function () {

});
$(function () {

$('[id*=ListBox1]').multiselect({

includeSelectAllOption: true,
allSelectedText: 'All Selected',
buttonWidth: '400px',
buttonHeight: '200px',
  maxHeight: 200,
//onChange : function(option, checked) {},
onDropdownShow: function(event) {},
onDropdownHide: function() {
document.getElementById('<%= hidTargetUserList.ClientID %>').value = 
$('[id*=ListBox1]').val();
},
selectAllValue: 0,
selectAllName: 'TargetUserAll',
});
 });
</script>


public partial class _Default : System.Web.UI.Page
{
    protected void Page_Load(object sender, EventArgs e)
    {
        if (!IsPostBack)
        {
            FillTargetUserList();
            FillReportGrid("");

        }
    }
    private void FillTargetUserList()

    {
        BusinessLayer bl = new BusinessLayer();
        DataSet dsTargetUser = bl.FillTargetUserList();
        ListBox1.DataSource = dsTargetUser;
        ListBox1.DataBind();
     }

    private void FillReportGrid(string targetuser )
    {
        BusinessLayer bl = new BusinessLayer();
        DataSet dsReport = bl.FillReportGrid(targetuser);
        gvReport.DataSource = dsReport;
        gvReport.DataBind();

    }

   protected void ListBox1_SelectedIndexChanged(object sender, EventArgse)
    {
        string targetusers = string.Empty;
        targetusers = hidTargetUserList.Value.ToString();
        FillReportGrid(targetusers);
    }
  }

Я ожидал, что серверное событие onSelectedindexChanged будет запущено после присвоения скрытого значения поля (после закрытия раскрывающегося списка) Но значение скрытого поля не может быть назначено из-за того, что autopostback запускает сначала серверную часть. Моим последним средством было бы использовать вызов Ajax и вернуть данные json для ручного добавления в сетку на стороне клиента. Можете ли вы придумать способ заполнить это, используя обработку на стороне сервера?

...