我试图在网格的动态创建链接按钮上下载csv文件。我在asp.net中下载csv时遇到了问题。异常:Sys.WebForms.PageRequestManagerParserErrorException此异常通过使用以下代码解决:
ScriptManager scriptManager = ScriptManager.GetCurrent(this.Page);
scriptManager.RegisterPostBackControl(this.grouplnkbutton);
在page_load事件中,但是this.grouplinkbutton(动态创建的链接按钮,即grouplnkbutton控件在page_lead事件中不可用(。
如何在pageload事件中使用链接按钮和scriptmanager。
代码:
protected void Page_Load(object sender, EventArgs e)
{
ScriptManager scriptManager = ScriptManager.GetCurrent(this.Page);
scriptManager.RegisterPostBackControl(this.grouplnkbutton);
//codes
}
protected void hlGroupName_Click(object sender, EventArgs e)
{
try`enter code here`
{
Response.ClearHeaders();
Response.ClearContent();
grouplnkbutton = sender as LinkButton;
string linkBtnValue = grouplnkbutton.CommandArgument;
GridDataItem item = grouplnkbutton.NamingContainer as GridDataItem;
ExportToCSV exportToCSV = new ExportToCSV();
StringBuilder csv = new StringBuilder();
DataSet gridData = new DataSet();
int scheduleId = Convert.ToInt32(((HiddenField)item.FindControl("hidID")).Value);
csv = exportToCSV.ExportScheduleDataToCSV(scheduleId);
Response.Buffer = true;
Response.Clear();
Response.ContentType = "text/csv";
Response.AddHeader("content-disposition", "attachment;filename=perfscheduleReport.csv");
//Response.Charset = "";
Response.Output.Write(csv.ToString());
//Response.Write(csv.ToString());
Response.Flush();
//Response.End();
}
感谢您的解决方案。标记码
<telerik:RadGrid ID="PerfGrid" GridLines="None" runat="server" CssClass="BorderGrid" OnItemDataBound="PerfGrid_ItemDataBound" OnItemCommand ="PerfGrid_ItemCommand"
Skin="Default" Width="100%" PageSize="100" PagerStyle-PageSizeLabelText="Records Per Page" AllowFilteringByColumn="true" OnNeedDataSource="PerfGrid_NeedDataSource" OnPageIndexChanged="PerfGrid_PageIndexChanged">
<ClientSettings EnableRowHoverStyle="true">
<Resizing AllowColumnResize="True" AllowRowResize="false" ResizeGridOnColumnResize="false"
ClipCellContentOnResize="true" EnableRealTimeResize="false" AllowResizeToFit="true" />
</ClientSettings>
<MasterTableView CommandItemDisplay="None" HorizontalAlign="NotSet" AllowPaging="false" AutoGenerateColumns="False" AllowSorting="true" AllowFilteringByColumn="True">
<HeaderStyle CssClass="GridHeader" Font-Bold="true"></HeaderStyle>
<ItemStyle BackColor="White" CssClass="text2" HorizontalAlign="Left" />
<AlternatingItemStyle BackColor="#E6EEF8" CssClass="text2" HorizontalAlign="Left" />
<%--<PagerStyle AlwaysVisible="true" Mode="NextPrevAndNumeric" />--%>
<Columns>
<telerik:GridBoundColumn DataField="ScheduleId" Display="false" ReadOnly="true" HeaderText="ID" AllowFiltering="false" HeaderStyle-Width="10px">
</telerik:GridBoundColumn>
<telerik:GridTemplateColumn HeaderText="Select" HeaderStyle-Width="15px" AllowFiltering="false">
<ItemTemplate>
<asp:CheckBox ID="CheckSelect" runat="server"></asp:CheckBox>
</ItemTemplate>
</telerik:GridTemplateColumn>
<telerik:GridTemplateColumn DataField="GroupingName" ReadOnly="true" HeaderText="Group Name" SortExpression="GroupName" HeaderStyle-Width="20px">
<ItemTemplate>
<asp:LinkButton ID="hlGroupName" runat="server" Text='<%# DataBinder.Eval(Container.DataItem, "GroupingName") %>' OnClick="hlGroupName_Click"></asp:LinkButton> <%--CommandName="Export"--%>
<%--<asp:HyperLink ID="hlTestCase" CommandName="Edit1" runat="server" Text='<%# Container.DataItem("TestDescription") %>'--%>
Target="_self"></asp:HyperLink>--%>
<asp:HiddenField ID="hidID" runat="server" Value='<%# CheckNull(DataBinder.Eval(Container.DataItem, "ScheduleId") , false)%>' />
<%--Value='<%# Container.DataItem("Id") %>' Value='<%# DataBinder.Eval(Container.DataItem, "Id") %>--%>
</ItemTemplate>
</telerik:GridTemplateColumn>
<telerik:GridBoundColumn SortExpression="TestDescription" DataField="TestDescription" ReadOnly="true" HeaderText="Test Cases" HeaderStyle-Width="30px">
</telerik:GridBoundColumn>
<telerik:GridBoundColumn SortExpression="ServerIP" DataField="ServerIP" ReadOnly="true" HeaderText="Server IP" HeaderStyle-Width="20px">
</telerik:GridBoundColumn>
<telerik:GridBoundColumn SortExpression="LoadNoOfUsersTobeSimulated" DataField="LoadNoOfUsersTobeSimulated" HeaderText="Users Load" ReadOnly="true" HeaderStyle-Width="12px">
</telerik:GridBoundColumn>
<telerik:GridBoundColumn SortExpression="StartTime" DataField="StartTime" HeaderText="Start Time" ReadOnly="true" HeaderStyle-Width="25px">
</telerik:GridBoundColumn>
<telerik:GridBoundColumn SortExpression="EndTime" DataField="EndTime" HeaderText="End Time" ReadOnly="true" HeaderStyle-Width="25px">
</telerik:GridBoundColumn>
</Columns>
</MasterTableView>
</telerik:RadGrid>
在这个lnkbtn-ID-";hlGroupname";onclick事件我想下载csv但正在获取异常:Sys.WebForms.PageRequestManagerParserErrorException已解决异常使用:
protected void Page_Load(object sender, EventArgs e)
{
ScriptManager scriptManager = ScriptManager.GetCurrent(this.Page);
ScriptManager.RegisterPostBackControl(this.PerfGrid);
//codes
}
我正在使用Scriptmanager,因为我的网格位于updatepanel下。这里PerfGrid是telerikGrid控制。代替网格控制,我想使用动态创建的网格链接按钮。点击我想下载csv的lnkbutton事件。
Hum,您的代码看起来不错,但为什么需要注册脚本?
转储你在加载事件中的代码,我认为没有必要??
你没有张贴你的标记,但说这样的网格:
<asp:GridView ID="GridView1" runat="server" CssClass="table" AutoGenerateColumns="False" DataKeyNames="ID">
<Columns>
<asp:BoundField DataField="ID" HeaderText="ID" InsertVisible="False" ReadOnly="True" />
<asp:BoundField DataField="ProjectName" HeaderText="ProjectName" />
<asp:BoundField DataField="ProjectDate" HeaderText="ProjectDate" />
<asp:TemplateField>
<ItemTemplate>
<asp:LinkButton runat="server" OnClick="LinkButton1_Click">My Link</asp:LinkButton>
</ItemTemplate>
</asp:TemplateField>
</Columns>
</asp:GridView>
你的按钮代码看起来很好。
我(到目前为止(还不明白为什么任何对注册脚本或按钮事件的需求都需要那个代码。你可以直接连接点击事件,不需要做更多的事情。
所以,在上面,链接按钮应该很好。检查并删除链接按钮的回邮URL设置-这可能是您的问题(但是,您至少没有发布链接按钮的标记。
它应该只需要您拥有的click even代码——不需要其他设置,如post-back URL,按钮点击事件就可以工作。事实上,为什么你使用LinkButton而不是说按钮,这一点都不清楚?(我认为不需要链接按钮(。
所以,没有真正的原因注册脚本的东西-删除它。
请注意,我不必包括PK行";ID";在标记中,甚至隐藏字段中。datakeys设置正是出于这个原因(从安全的角度来看,这很好——我不必渲染PK行ID有隐藏字段或任何东西。
因此,此代码可以获得PK id
protected void LinkButton1_Click(object sender, EventArgs e)
{
LinkButton lBtn = sender as LinkButton;
GridViewRow gRow = lBtn.NamingContainer as GridViewRow;
// get row click index with gRow.RowIndex
int? pkID = GridView1.DataKeys[gRow.RowIndex]["ID"] as int?;
我填写gv的代码是:
using (SqlCommand cmdSQL = new SqlCommand("SELECT * from Project"L, conn))
{
conn.Open();
GridView1.DataSource = cmdSQL.ExecuteReader();
GridView1.DataBind();
}
现在,当然,如果您使用行数据绑定任何事情?然后不要将GV绑定到读取器,而是使用以下内容:
conn.Open();
DataTable rstData = new DataTable();
rstData.Load(cmdSQL.ExecuteReader();
GridView1.DataSource = rstData;
GridView1.DataBind();