Свяжите Gridview внутри модального и покажите модальное в c# - PullRequest
0 голосов
/ 18 января 2020

У меня есть Gridview с кнопкой Link. При нажатии на кнопку ссылки, он должен открыть модальные данные Gridview. Модальный открывается, но проблема в том, что Gridview пусто. При отладке он получает данные из источника данных (Excel). Перед заполнением Gridview, модальные отображаются. Я использовал Asyn c, но он не работает.

Дизайн '/>' /> '/>' /> '>

                    <asp:TemplateField HeaderText="Employee No">
                        <ItemTemplate>
                            <asp:Label ID="lblEmpno" runat="server" Text='<%# Bind("EmpNo") %>'></asp:Label>
                        </ItemTemplate>
                    </asp:TemplateField>
                    <asp:BoundField DataField="EmpName" HeaderText="Employee Name" />
                    <asp:TemplateField HeaderText="Request Date">
                        <ItemTemplate>
                            <asp:Label ID="lblReqDate" runat="server" Text='<%# Bind("ReqDate","{0:dd-MM-yyyy}") %>'></asp:Label>
                        </ItemTemplate>
                    </asp:TemplateField>
                    <asp:TemplateField HeaderText="Product Name">
                        <ItemTemplate>
                            <asp:Label ID="lblModel" runat="server" Text='<%# Bind("MODEL_NAME") %>'></asp:Label>
                        </ItemTemplate>
                    </asp:TemplateField>

                    <asp:BoundField DataField="PriceRationale" HeaderText="Price Rationale" />
                    <asp:BoundField DataField="VolumesImpact" HeaderText="Volumes Impact" />
                    <asp:BoundField DataField="CompetitorAction" HeaderText="Competitor Action" />
                    <asp:TemplateField HeaderText="Finance Document" ItemStyle-Width="50px">
                        <ItemTemplate>
                            <asp:LinkButton ID="lnkFDocBtn" runat="server" Text='<%# Bind("MODEL_NAME") %>' OnCommand="lnkFDocBtn_CommandAsync"></asp:LinkButton>
                            <asp:HiddenField ID="hiddenModelDoc" runat="server" Value='<%# Bind("FileName") %>' />
                        </ItemTemplate>
                    </asp:TemplateField>
                    <asp:BoundField DataField="Remarks" HeaderText="Remarks" />
                    <asp:TemplateField HeaderText="Request Date">
                        <ItemTemplate>
                            <asp:Label ID="lblEffectiveDate" runat="server" Text='<%# Bind("EffectiveDate","{0:dd-MM-yyyy}") %>'></asp:Label>
                        </ItemTemplate>
                    </asp:TemplateField>
                    <asp:TemplateField HeaderText="Raise Clarification">
                        <ItemTemplate>
                            <div style="text-align: center;">
                                <asp:ImageButton ID="btnnClarification" OnCommand="btnnClarification_Command" runat="server" ToolTip="Click here to Ask Clarification!" ImageUrl="Images/cla1.png" />
                            </div>
                        </ItemTemplate>
                    </asp:TemplateField>
                    <asp:TemplateField HeaderText="View Clarification">
                        <ItemTemplate>
                            <div style="text-align: center;">
                                <asp:ImageButton ID="btnvReport" runat="server" Enabled="false" ToolTip="Click here to view Clarification!" ImageUrl="Images/reportview.png" />
                            </div>
                        </ItemTemplate>
                    </asp:TemplateField>
                    <asp:TemplateField HeaderText="Approve">
                        <ItemTemplate>
                            <div style="text-align: center;">
                                <asp:ImageButton ID="btnApprove" runat="server" ToolTip="Click here to Approve!" ImageUrl="Images/Approve.png" OnCommand="btnApprove_Command" />
                            </div>
                        </ItemTemplate>
                    </asp:TemplateField>
                    <asp:TemplateField HeaderText="Reject">
                        <ItemTemplate>
                            <div style="text-align: center;">
                                <asp:ImageButton ID="btnReject" runat="server" ToolTip="Click here to Reject!" ImageUrl="Images/Reject.png" OnCommand="btnReject_Command" />
                            </div>
                        </ItemTemplate>
                    </asp:TemplateField>
                </Columns>
            </asp:GridView>
<div id="MyPopupTD" class="modal fade" role="dialog">
    <div class="modal-dialog">
        <div class="modal-content">
            <div class="modal-header">

                <h4 class="modal-title">Finance Document Details
                </h4>
            </div>
            <div class="modal-body">
                <asp:GridView ID="grdFinanceDocDetails" runat="server" AutoGenerateColumns="false">
                </asp:GridView>
            </div>
            <div class="modal-footer">
                <input type="button" id="btnClosePopup" value="Close" class="btn btn-danger" data-dismiss="modal" />
            </div>
        </div>
    </div>
</div>

Код позади:

 protected async void lnkFDocBtn_CommandAsync(object sender, CommandEventArgs e)
    {
        try
        {

            GridViewRow gv = ((Control)sender).Parent.NamingContainer as GridViewRow;
            Label lblModel = (Label)gv.FindControl("lblModel");
            HiddenField hiddenModelDoc = (HiddenField)gv.FindControl("hiddenModelDoc");
            lblModel.Text = lblModel.Text.ToLower();
            var t = new CultureInfo("en-US", false).TextInfo;
            lblModel.Text = t.ToTitleCase(lblModel.Text);
            await GetSomeData(lblModel.Text, hiddenModelDoc.Value);
            Page.ClientScript.RegisterStartupScript(GetType(), "modelBox", "$('#MyPopupTD').modal('show');", true);
        }
        catch(Exception ex)
        {
            throw ex;
        }
    }
    private async Task GetSomeData(string model, string filename)
    {
        //Use Async method to get data.
        DataTable results = await GetDataTableAsync(model,filename);

        //Populate once data received.
        grdFinanceDocDetails.DataSource = results;
        grdFinanceDocDetails.DataBind();
    }

    public Task<DataTable> GetDataTableAsync(string model,string filename)
    {
        return Task.Run(() =>
        {
            string path = System.IO.Path.GetFullPath(Server.MapPath(("~/PriceDocument/" + "/" + filename)));
            string ConStr = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" + path + ";Extended Properties=\"Excel 12.0;HDR=Yes;IMEX=2\"";
            //string extn = Path.GetExtension(path);
            string query = "SELECT * FROM [" + model + "$]";
            OleDbConnection conn;
            conn = new OleDbConnection(@"Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" + path + ";Extended Properties=\'Excel 12.0 Xml;Readonly=0;HDR=YES;IMEX=1\'");
            if (conn.State == ConnectionState.Closed)
            {
                conn.Open();
            }
            //create command object  
            OleDbCommand cmd = new OleDbCommand(query, conn);
            // create a data adapter and get the data into dataadapter  
            OleDbDataAdapter da = new OleDbDataAdapter(cmd);
            DataTable dt = new DataTable();
            //fill the Excel data to data set  
            da.Fill(dt);
            return dt;
        });
    }

Пожалуйста, помогите. Заранее спасибо: -)

...