实现模版列有超连接外观,一点实现打开或者下载的功能。
<ItemTemplate>
<a href='download.aspx?DocTitle=<%# DataBinder.Eval(Container.DataItem,"DocTitle") %>'>
<%# DataBinder.Eval(Container.DataItem,"DocTitle") %>
</a>
</ItemTemplate>
为LinKbutton添加单击事件和变换所选项背景颜色
DataGrid中绑定javascript事件,实现删除提示和变换背景色
private void dgSearch_ItemDataBound(object sender, System.Web.UI.WebControls.DataGridItemEventArgs e)
{
if(e.Item.ItemType==ListItemType.Item ||e.Item.ItemType==ListItemType.AlternatingItem)
/*判断是否为正常项和交替项*/
{
e.Item.Attributes.Add("onmouseover","c=this.style.backgroundColor;this.style.backgroundColor='#bfdcff'");
/*给正常项(即每一列)添加onmouseover事件*/
e.Item.Attributes.Add("onmouseout","this.style.backgroundColor=c");
/*给正常项(即每一列)添加onmouseout事件*/
/*以上两行实现变换背景色*/
((LinkButton)e.Item.FindControl("lbtnDel")).Attributes.Add("onClick","return confirm('确定要删除吗?')");
/*给删除按钮添加单击事件,实现删除前提示*/
}
}
posted
--------------------------------------------------------------------------------
在DataGrid中建一个模板列,在模板列中放一个客户端的Button,或者直接写你要的字句,然后用<a href>连接
例:
<TABLE id="Table1" cellSpacing="0" cellPadding="0" width="100%" align="center" border="0">
<TR>
<TD width="100%">
<asp:datagrid id="dgFreightInfo" runat="server" Width="96%" GridLines="Horizontal" AllowCustomPaging="True"
AllowPaging="True" AutoGenerateColumns="False" DataKeyField="id" BorderColor="White" BorderWidth="1px"
PageSize="20">
<ItemStyle Height="25px" BackColor="#F7F7F7"></ItemStyle>
<HeaderStyle Font-Bold="True" HorizontalAlign="Center" Height="25px" BackColor="#E8E8E8"></HeaderStyle>
<Columns>
<asp:TemplateColumn>
<ItemTemplate>
<A href='javascript:onclick=LoadFreight(<%# DataBinder.Eval(Container,"DataItem.id")%>)'>
详细信息</A>
</ItemTemplate>
</asp:TemplateColumn>
</Columns>
</asp:datagrid>
</TD>
</TR>
然后写一个JavaScript方法
<script language="javascript">
function LoadFreight(id)//id为传进的参数
{
var url='url.aspx?tid='+id+'';
window.open(url,'','scrollbars=yes,top=0,left=0,resizable=no,status=no,toolbar=no,menubar=no,location=no,width=430,height=600');
}
</script>
-------------------------------------------------------------------------
DataGrid中使用Button操作
首先在Datagrid里设置OnItemCommand事件,指向处理函数,然后在模板列加button,设置button的CommandName属性,在后台根据CommandName来判断点击了那个button,并进行处理。
<asp:DataGrid id="DataGrid1" runat="server" OnItemCommand="itemComm">
<Columns>
<asp:TemplateColumn HeaderText="比较1">
<ItemTemplate>
<asp:Label id=Button2 runat="server">
<%# DataBinder.Eval(Container.DataItem,"id")+@"/"+ DataBinder.Eval(Container.DataItem,"project")%>
</asp:Label>
</ItemTemplate>
</asp:TemplateColumn>
<asp:TemplateColumn HeaderText="比较2">
<ItemTemplate>
<asp:Button ID=btn1 Runat=server CommandName="test1" Text=<%# DataBinder.Eval(Container.DataItem,"id")%>>
</asp:Button>
</ItemTemplate>
</asp:TemplateColumn>
<asp:TemplateColumn HeaderText="比较3">
<ItemTemplate>
<asp:Button ID="Button3" Runat=server CommandName="test2" Text=<%# DataBinder.Eval(Container.DataItem,"id")%>>
</asp:Button>
</ItemTemplate>
</asp:TemplateColumn>
</Columns>
</asp:DataGrid>
后台的函数:
public void itemComm(object sender,DataGridCommandEventArgs e)
{
switch(Convert.ToString(((Button)e.CommandSource).CommandName))
{
case "test1":
this.button1.Text=e.Item.ItemIndex.ToString();
break;
case "test2":
this.button1.Text=e.Item.ID.ToString();
break;
}
}
-----------------------------------------------------------------------------------------------------------
有很多网友遇到这样的问题:在DataGrid模板列中的按钮可以触发ItemCommand事件但是怎么触发其他事件?(比如放置DropDownList怎么触发SelectedIndexChange事件?……)
按照http://blog.csdn.net/LoveCherry/archive/2005/03/24/328455.aspx我们进行一下修改:
在模板列中增加一个DropDownList
<asp:TemplateColumn HeaderText="学院">
<ItemTemplate>
<asp:DropDownList ID="dep2" Runat="server" AutoPostBack="True" OnSelectedIndexChanged="DropDownList2_SelectedIndexChanged"></asp:DropDownList>
</ItemTemplate>
<EditItemTemplate>
<asp:DropDownList ID="dep" Runat="server"></asp:DropDownList>
</EditItemTemplate>
</asp:TemplateColumn>
在前台直接加上事件DropDownList2_SelectedIndexChanged
然后在后台添加事件就可以了
protected void DropDownList2_SelectedIndexChanged(object sender, System.EventArgs e)
{
Response.Write(((DropDownList)sender).SelectedItem);
}
注意,事件不能是private的,这里的sender就是这个下拉框,类型转换一下就能使用了
--------------------------------------------------------------------------------------------------------------------
页面一的代码,再点击“下载”事件里面写
string SavePath = Convert.ToString(db.yourpath);
if(!File.Exists(SavePath)) return;
string Url = Request.ApplicationPath;
Url += "/youDir/FileDownload.aspx?path=";
Url += HttpUtility.UrlEncode(SavePath)+"&&type="+Convert.ToString(db.yourFileType);
this.Server.Transfer(Url);
这就是你那样的存储方式了。首先取得你的源文件所在的地方然后检查这个路径是否存在,如果存在的话就让一个干净的网页来下载你的文件。
页面二代码:在pageLoad事件里面写
string filePath = Request.QueryString["path"];
string fileType = Request.QueryString["type"];
string fileName = Path.GetFileName(filePath);
FileStream fs = File.OpenRead(filePath);
this.Response.ContentType = fileType;
Response.AddHeader("Content-Disposition:", "attachment; filename=" + HttpUtility.UrlEncode(fileName));
int count = 0;
int length = (int)fs.Length;
byte[] buf = null;
fs.Position = 0;
while(count <length-1)
{
if(length - count-1 >=100)
{
buf = new byte[100];
}
else
{
buf = new byte[length - count-1];
}
count += buf.Length;
fs.Read(buf,0,buf.Length);
this.Response.BinaryWrite(buf);
//offset = (int)fs.Position+1;
}
fs.Close();
//br.Close();
this.Response.Flush();
这样的好处是用户没有办法知道你的路径是什么,因为是你在服务器端从数据库中写的,而且传输到客户端的。记得要加上System.IO的引用
记得页面二里面除了Page指令之外的所有标记都要删除干净,否则你的txt文件就无法得到正确的内容,其他文件没有问题。这也是为什么一定要让下载文件放到页面二的原因。
不需要使用模板列,使用普通的命令按钮列就可以了!
private void Dtg_FileList_ItemCommand(object source, System.Web.UI.WebControls.DataGridCommandEventArgs e)
{
if(e.CommandName == "Download")
{
string wdbh = e.Item.Cells[0].Text;
//通过wdbh获取db,然后
string SavePath = Convert.ToString(db.yourpath);
if(!File.Exists(SavePath)) return;
string Url = Request.ApplicationPath;
Url += "/youDir/FileDownload.aspx?path=";
Url += HttpUtility.UrlEncode(SavePath)+"&&type="+Convert.ToString(db.yourFileType);
this.Server.Transfer(Url);
}
}
DataGrid中实现点击删除按钮出现“确定删除吗”提示框???
private void dgrd_zs_ItemDataBound_1(object sender, System.Web.UI.WebControls.DataGridItemEventArgs e)
{
foreach(Control con in e.Item.Cells[6].Controls)
{
if(con.ToString()=="System.Web.UI.WebControls.DataGridLinkButton")
{
System.Web.UI.WebControls.LinkButton lbtn=(System.Web.UI.WebControls.LinkButton)con;
lbtn.Attributes.Add("onclick", "return confirm('您确定删除该条记录吗?')");
}
}
}