У меня есть 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;
});
}
Пожалуйста, помогите. Заранее спасибо: -)