• DataGrid控件用法


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

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

  • 相关阅读:
    LeetCode 27. Remove Element(C++)
    LeetCode 26. Remove Duplicates from Sorted Array
    LeetCode 21. Merge Two Sorted Lists(c++)
    LeetCode 20. Valid Parentheses(c++)
    LeetCode 14.Longest Common Prefix(C++)
    poj1847 Tram(最短路dijkstra)
    poj 3268 Silver Cow Party(最短路dijkstra)
    LeetCode 13. Roman to Integer(c语言版)
    hdu2181 简单搜索
    python 算法 day1
  • 原文地址:https://www.cnblogs.com/Godblessyou/p/1779013.html
Copyright © 2020-2023  润新知