相忘于江湖

不抛弃,不放弃... 请给我勇敢,改变可以改变的;请给我坚强,接受不可以改变的;请给我智慧,分辨这两者。

  博客园 :: 首页 :: 博问 :: 闪存 :: 新随笔 :: 联系 :: 订阅 订阅 :: 管理 ::

实现模版列有超连接外观,一点实现打开或者下载的功能。

<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('您确定删除该条记录吗?')");  
  }  
  }  
  }

 

posted on 2010-07-16 16:15  playman0211  阅读(360)  评论(0编辑  收藏  举报