··DataGrid1_ItemCommand需要实现下载功能,命令没有错误,为什么无法触发ItemCommand事件??点击按钮后没有任何反应。有代码,在线等

lanting918 2004-08-18 03:09:10
希望在模板列中使用button实现下载功能,C#,WEBFORM。以下是ASPX代码:
<asp:DataGrid id="DataGrid1" runat="server" BorderColor="#CC9966" BorderStyle="None" BorderWidth="1px"
DataKeyField="orderID" OnItemCommand="DataGrid1_ItemCommand" BackColor="White" CellPadding="4"
AutoGenerateColumns="False" Width="320px" OnPageIndexChanged="PageIndexChanged1" AllowPaging="True">
<SelectedItemStyle Font-Bold="True" ForeColor="#663399" BackColor="#FFCC66"></SelectedItemStyle>
<ItemStyle ForeColor="#330099" BackColor="White"></ItemStyle>
<HeaderStyle Font-Bold="True" ForeColor="#FFFFCC" BackColor="#990000"></HeaderStyle>
<FooterStyle ForeColor="#330099" BackColor="#FFFFCC"></FooterStyle>
<Columns>
<asp:BoundColumn DataField="orderID" HeaderText="编号">
<HeaderStyle Width="50px"></HeaderStyle>
</asp:BoundColumn>
<asp:BoundColumn DataField="fileName" HeaderText="文件名">
<HeaderStyle Width="100px"></HeaderStyle>
</asp:BoundColumn>
<asp:TemplateColumn HeaderText="模板下载">
<HeaderStyle Width="50px"></HeaderStyle>
<ItemTemplate>
<asp:Button id="down_Click" runat="server" CommandName="Download" Text="下载"></asp:Button>
</ItemTemplate>
</asp:TemplateColumn>
</Columns>
<PagerStyle HorizontalAlign="Center" ForeColor="#330099" BackColor="#FFFFCC"></PagerStyle>
</asp:DataGrid>

.cs页面代码:这里pubilc如果使用private就会出现无权限的编译错误,而使用protected一样没有任何下载反应,根本没有触发button事件。
public void DataGrid1_ItemCommand(object source, System.Web.UI.WebControls.DataGridCommandEventArgs e)
{
if(e.CommandName == "Download")
{
//文件名
string fileExcel = e.Item.Cells[1].Text;

//取得的文件存储路径
string filePath = Server.MapPath("\\UploadFiles");
string fileName = filePath + "\\" + fileExcel;
//以字符流的形式下载文件
FileStream fs = new FileStream(fileName, FileMode.Open);
byte[] bytes = new byte[(int)fs.Length];
fs.Read(bytes, 0, bytes.Length);
fs.Close();
Response.ContentType = "application/octet-stream";
//通知浏览器下载文件而不是打开
Response.AddHeader("Content-Disposition", "attachment; filename=" + HttpUtility.UrlEncode(fileExcel)) ;
Response.BinaryWrite(bytes);
Response.End();
}
}
问题拖了好几天了,总是想不明白,请大家帮忙!!谢谢!!!!
原先帖子的地址:http://community.csdn.net/Expert/topic/3279/3279497.xml?temp=.1051294
...全文
150 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
lanting918 2004-08-18
  • 打赏
  • 举报
回复
再次感谢:)
lanting918 2004-08-18
  • 打赏
  • 举报
回复
谢谢,乱码的问题也已经解决了。加上了:,System.Text.Encoding.UTF8
//通知浏览器下载文件而不是打开
Response.AddHeader("Content-Disposition", "attachment; filename=" + HttpUtility.UrlEncode(fileWord,System.Text.Encoding.UTF8)) ;
谢谢大家的帮助!特别是 abf() 从昨天就开始的耐心解释。。
abf 2004-08-18
  • 打赏
  • 举报
回复
好的,恭喜!!呵呵
lanting918 2004-08-18
  • 打赏
  • 举报
回复
谢谢!下载已经实现了。但是下下来的是乱码。。汗。。。原来我是用来下载excel文件的,完全可以用的,为什么word就不可以? /
qimini 2004-08-18
  • 打赏
  • 举报
回复
if(!IsPostBack)
{
//把DataGrid的数据绑定代码放到这里,应该就可以了
}
或者是把DataGrid的ViewState禁用了(EnableViewState属性)
abf 2004-08-18
  • 打赏
  • 举报
回复
private void InitializeComponent()
{
//添加下面事件
this.DataGrid1.ItemCommand += new System.Web.UI.WebControls.DataGridCommandEventHandler(this.DataGrid1_ItemCommand);
}
这个函数在.cs中的web窗体设计器生成的代码里
lanting918 2004-08-18
  • 打赏
  • 举报
回复
并没有进入这个事件函数,应该怎么修改呢?谢谢!
abf 2004-08-18
  • 打赏
  • 举报
回复
下面调试通过:
.cs
private void DataGrid1_ItemCommand(object source, System.Web.UI.WebControls.DataGridCommandEventArgs e)
{
if(e.CommandName == "download")
{
Response.Write("success!");
}
}
.aspx
<asp:TemplateColumn HeaderText="下载">
<ItemTemplate>
<FONT face="宋体">
<asp:Button id="Button1" CommandName="download" runat="server" Text="下载"></asp:Button></FONT>
</ItemTemplate>
</asp:TemplateColumn>
abf 2004-08-18
  • 打赏
  • 举报
回复
你在ItemCommand事件处设断点看看有没进入
jupiterII 2004-08-18
  • 打赏
  • 举报
回复
这个方法声明private报错是因为你是在datagrid的属性里绑定的事件,所以只能声明为protected或者public.
至于你说你的方法没有执行的话,你先试试在if(e.CommandName == "Download")加个断点,然后debug看看这句有没有执行到.
lanting918 2004-08-18
  • 打赏
  • 举报
回复
“在.aspx的页面上点DataGrid,点右键,点击最后一个属性,
在.net环境中出现该DataGrid的属性,在其事件中找到ItemCommand
在右边双击一下,就可以了”
我已经这样做了,还是不行。。。。。好郁闷。。请大家帮忙!!

110,534

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧