DataGrid 功能实现收集(二)

简介:

datagrid中打开新窗体
None.gif DataGrid1.Attributes.Add( " onclick " , " window.open('Print_GoodsMove.aspx?GoodsMove_ID= "   +  Apply_ID  +   " ','newwindow', 'height=600, width=745, top=100, left=100, toolbar=no, menubar=no, scrollbars=no, resizable=no,location=no, status=no'); " ); 
跨页面实现多选
None.gif SelectMultiPages.aspx
None.gif
ExpandedBlockStart.gif
<% @ Page EnableViewState="true" CodeBehind="SelectMultiPages.aspx.cs" Language="c#" 
ExpandedBlockEnd.gifAutoEventWireup
="false" Inherits="eMeng.Exam.SelectMultiPages" 
%>
None.gif
<! DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN" >
None.gif
< HTML >
None.gif
< HEAD >
None.gif
< title > 跨页面实现多选 </ title >
None.gif
< META  http-equiv ="content-type"  content ="text/html; charset=gb2312" >
ExpandedBlockStart.gif
< style >
ExpandedSubBlockStart.gif
{FONT-SIZE:12PX}
ExpandedSubBlockStart.gif#Status 
{text-align:left}
None.gif
</ style >
ExpandedBlockStart.gif
< script  language ="JAVASCRIPT" >
ExpandedSubBlockStart.gif
function AddRemoveValues(oChk) 
InBlock.gif
//在处理这个地方需要注意的是:你保存的值应该具有唯一性,这样才能不会替换错误的项。
InBlock.gif
if(oChk.checked)
InBlock.gifSelectMultiPage.HdnSelectedValues.value 
+= "," + oChk.value; 
InBlock.gif
else
InBlock.gifSelectMultiPage.HdnSelectedValues.value 
= SelectMultiPage.HdnSelectedValues.value.replace("," + oChk.value,""); 
ExpandedBlockEnd.gif}

None.gif
</ script >
None.gif
</ HEAD >
None.gif
< BODY >
None.gif
< form  id ="SelectMultiPage"  runat ="server" >
None.gif
< asp:datagrid  id ="DataGrid1"  HorizontalAlign ="Center"  AutoGenerateColumns ="False"  Width ="600px"
None.gif        AllowPaging
="True"  runat ="server" >
None.gif    
< AlternatingItemStyle  BackColor ="#EEEEEE" ></ AlternatingItemStyle >
None.gif    
< HeaderStyle  BackColor ="#AAAADD"  Font-Bold ="True"  HorizontalAlign ="Center" ></ HeaderStyle >
None.gif    
< PagerStyle  HorizontalAlign ="Right"  Mode ="NumericPages"  Visible ="True" ></ PagerStyle >
None.gif    
< Columns >
None.gif        
< asp:TemplateColumn  HeaderText ="选择" >
None.gif            
< ItemTemplate >
None.gif                
< input  type ="checkbox"  runat ="server"  id ="chkSelect"  onclick ="AddRemoveValues(this)"
None.gif                    value
='<%#DataBinder.Eval(Container.DataItem,"Title")% > '/>
None.gif            
</ ItemTemplate >
None.gif        
</ asp:TemplateColumn >
None.gif        
< asp:TemplateColumn  HeaderText ="文章标题" >
None.gif            
< ItemTemplate >
None.gif                
< asp:Literal  Text ='<%#  DataBinder.Eval(Container.DataItem, "Title") % > ' runat="server" ID="TitleShow"/>
None.gif            
</ ItemTemplate >
None.gif        
</ asp:TemplateColumn >
None.gif        
< asp:TemplateColumn  HeaderText ="发布时间" >
None.gif            
< ItemTemplate >
None.gif                
< asp:Literal  Text ='<%#  DataBinder.Eval(Container.DataItem, "CreateDate").ToString() % > ' runat="server"/>
None.gif            
</ ItemTemplate >
None.gif        
</ asp:TemplateColumn >
None.gif    
</ Columns >
None.gif
</ asp:datagrid >
None.gif
< div  align =center >
None.gif
< asp:button  id ="Button1"  runat ="server"  Text ="得到所选的值" ></ asp:button >
None.gif
< div  id ="Status" >
None.gif
< asp:label  id ="Label1"  runat ="server" ></ asp:label >
None.gif
</ div >
None.gif
< INPUT  id ="HdnSelectedValues"  type ="hidden"  name ="HdnSelectedValues"  runat ="server" >
None.gif
</ div >
None.gif
</ form >
None.gif
</ BODY >
None.gif
</ HTML >
None.gif
None.gif
None.gif SelectMultiPages.aspx.cs
None.gif
None.gif
using  System;
None.gif
using  System.Collections;
None.gif
using  System.ComponentModel;
None.gif
using  System.Data;
None.gif
using  System.Data.OleDb;
None.gif
using  System.Drawing;
None.gif
using  System.Web;
None.gif
using  System.Web.SessionState;
None.gif
using  System.Web.UI;
None.gif
using  System.Web.UI.WebControls;
None.gif
using  System.Web.UI.HtmlControls;
None.gif
None.gif
namespace  eMeng.Exam
ExpandedBlockStart.gif
{
ExpandedSubBlockStart.gif
/// <summary>
InBlock.gif
/// SelectMultiPages 的摘要说明。
ExpandedSubBlockEnd.gif
/// </summary>

InBlock.gifpublic class SelectMultiPages : System.Web.UI.Page
ExpandedSubBlockStart.gif
{
InBlock.gif
protected System.Web.UI.WebControls.Button Button1;
InBlock.gif
protected System.Web.UI.WebControls.Label Label1;
InBlock.gif
protected System.Web.UI.HtmlControls.HtmlInputHidden HdnSelectedValues;
InBlock.gif
protected System.Web.UI.WebControls.DataGrid DataGrid1;
InBlock.gif
InBlock.gif
private void Page_Load(object sender, System.EventArgs e)
ExpandedSubBlockStart.gif
{
InBlock.gif    
// 在此处放置用户代码以初始化页面
InBlock.gif
    if(!Page.IsPostBack)
InBlock.gif    BindData();
ExpandedSubBlockEnd.gif}

InBlock.gif
private void DataGrid1_PageIndexChanged(object source, DataGridPageChangedEventArgs e)
ExpandedSubBlockStart.gif
{
InBlock.gif    DataGrid1.CurrentPageIndex 
= e.NewPageIndex;
InBlock.gif    BindData(); 
ExpandedSubBlockEnd.gif}

InBlock.gif
InBlock.gif
void BindData()
ExpandedSubBlockStart.gif
{
InBlock.gif    OleDbConnection cn 
= new OleDbConnection("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" 
InBlock.gif        
+ HttpContext.Current.Server.MapPath("aspx.mdb"));
InBlock.gif    OleDbDataAdapter da 
= new OleDbDataAdapter("Select Title, CreateDate from Document",cn);
InBlock.gif    DataSet ds 
= new DataSet();
InBlock.gif    da.Fill(ds);
InBlock.gif    DataGrid1.DataSource
= ds;
InBlock.gif    DataGrid1.DataBind();
ExpandedSubBlockEnd.gif}

InBlock.gif
InBlock.gif
private void DataGrid1_ItemDataBound(object sender, System.Web.UI.WebControls.DataGridItemEventArgs e)
ExpandedSubBlockStart.gif
{
InBlock.gif    
//重新显示所选择的项目
InBlock.gif
    if(e.Item.ItemType == ListItemType.Item || e.Item.ItemType == ListItemType.AlternatingItem)
ExpandedSubBlockStart.gif    
{
InBlock.gif        
if(HdnSelectedValues.Value.IndexOf(((Literal)e.Item.Cells[1].FindControl("TitleShow")).Text) >= 0 )
ExpandedSubBlockStart.gif        
{
InBlock.gif            HtmlInputCheckBox ChkSelected 
= (HtmlInputCheckBox)(e.Item.Cells[0].FindControl("ChkSelect"));
InBlock.gif            ChkSelected.Checked 
= true;
ExpandedSubBlockEnd.gif        }

ExpandedSubBlockEnd.gif    }

ExpandedSubBlockEnd.gif}

InBlock.gif
private void Button1_Click(object sender, System.EventArgs e)
ExpandedSubBlockStart.gif
{
InBlock.gif    
//为了显示的方便进行替换的
InBlock.gif
    Label1.Text = HdnSelectedValues.Value.Replace(",","<li>");
ExpandedSubBlockEnd.gif}

InBlock.gif
ContractedSubBlock.gif
Web 窗体设计器生成的代码    
InBlock.gif
ExpandedSubBlockEnd.gif}

ExpandedBlockEnd.gif}

None.gif
None.gif
如何给DataGrid添加自动增长列
None.gif 我们用Northwind数据库做例子:
None.gifhtml页面的DataGrid如下所示:
None.gif
< asp:datagrid  id ="grdTest"  runat ="server"  Height ="228px"  Width ="262px"  AutoGenerateColumns ="False"  AllowPaging ="True" >
None.gif     
< Columns >
None.gif      
< asp:TemplateColumn >
None.gif       
< ItemTemplate >
None.gif
<!--  这里是关键 -->
None.gif        
< SPAN >
ExpandedBlockStart.gif          
<% # Container.ItemIndex+1  %> </ SPAN >
None.gif       
</ ItemTemplate >
None.gif      
</ asp:TemplateColumn >
None.gif      
< asp:BoundColumn  DataField ="CategoryName" ></ asp:BoundColumn >
None.gif      
< asp:BoundColumn  DataField ="Description" ></ asp:BoundColumn >
None.gif     
</ Columns >
None.gif    
</ asp:datagrid >
None.gif下面我们可以写他的后台代码cs的文件了我们在它的Page_Load里面添加绑定方法如下所示:
None.gifprivate void Page_Load(object sender, System.EventArgs e)
None.gif  {
None.gif   // 在此处放置用户代码以初始化页面
None.gif   strConnection = ConfigurationSettings.AppSettings["sa"].ToString();
None.gif   myConnection = new SqlConnection(strConnection);
None.gif   SqlDataAdapter myAdapter = new SqlDataAdapter("SELECT CategoryName, Description FROM Categories",myConnection);
None.gif// 为了分页方便ds是一个全局的变量
None.gif   myAdapter.Fill(ds);
None.gif   this.grdTest.DataSource = ds.Tables[0].DefaultView;
None.gif   this.grdTest.DataBind();
None.gif}
None.gif
None.gif从上面的过程可以看出我们使用的是表Categories,这样我们就可以产生一列自增长的列,此列是从1开始的。如果我们想要一个从0开始的列有该怎么办呢?我们可以把
<!--  这里是关键 --> 下面的 < span > 里面的东西换成 < asp:Label  id =lblRowNumber  runat ="server"  Text ='<%#  DataBinder.Eval(Container, "ItemIndex", "{0}") % > '>就可以了。
None.gif
None.gif如果我们想要实现分页也显示的方法我们将使用DataTable的方法来实现,首先我们将DataGrid的列全部变成绑定列(为了方便演示,不是必须)。如下所示:
None.gif
< asp:table  id ="tbData"  runat ="server"  BackColor ="LightSteelBlue"  Height ="13px"  Width ="16px"  Font-Names ="宋体"  Font-Name ="宋体"  Font-Size ="8pt"  CellPadding ="1"  CellSpacing ="0"  BorderColor ="black"  BorderWidth ="1"  Gridlines ="Both" ></ asp:table >< br />
None.gif    
< asp:datagrid  id ="grdTest"  runat ="server"  Height ="228px"  Width ="262px"  AutoGenerateColumns ="False"  PageSize ="2"  AllowPaging ="True" >
None.gif     
< Columns >
None.gif      
< asp:BoundColumn  DataField ="RowNumber"  HeaderText ="RowNumber" ></ asp:BoundColumn >
None.gif      
< asp:BoundColumn  DataField ="CategoryName" ></ asp:BoundColumn >
None.gif      
< asp:BoundColumn  DataField ="Description" ></ asp:BoundColumn >
None.gif     
</ Columns >
None.gif    
</ asp:datagrid >
None.gif在后台我们添加一个函数:
None.gifprivate DataTable GetRowNumberTable(DataTable dt){
None.gif   DataColumn col = new DataColumn("RowNumber",Type.GetType("System.Int32"));
None.gif   dt.Columns.Add(col);
None.gif   for(int i = 0;i
< =dt .Rows.Count-1;i++){
None.gif    if(0 
==  i) 
None.gif     dt.Rows[i][col] 
= 1;
None.gif    
else 
None.gif     dt.Rows[i][col] 
= Convert.ToInt32(dt.Rows[i-1][col])  +1;
None.gif   }
None.gif   return dt;
None.gif  }
None.gif然后我们将原来数据源改成如下:
None.gifthis.grdTest.DataSource 
= this.GetRowNumberTable(ds.Tables[0]).DefaultView;
None.gif
这样一来即使分页,数字也是连续的,并且将编号应用于所有的行而不是当前这一页的行。
None.gif
None.gif
在多线程里查询数据库并填充dataGrid
None.gif  在查询大数据量时,窗体界面会不动,“正在查询dot.gif”的提示也不能显示。所以打算用多线程来实现,
None.gif可是当在线程里面执行到 
this .dataGridDF.DataSource = dt.DefaultView;填充数据
None.gif时却提示报错,说什么该线程不能调用主线程创建的控件等等。
None.gif后来查了许多资料,终于搞定。可以在查询数据库时操作别的了,“正在查询dot.gif”的提示也显示了。 
None.gif 
None.gif
// 或者在前面用一个线程查询,在线程里调用dataGrid.BeginInvoke(异步方法)来单独填充
None.gif
 
None.gif  
public   delegate   void  myDelegate();
None.gif  DataTable dt;
None.gif 
None.gif  
private   void  btnDianJia_Click( object  sender, System.EventArgs e)
ExpandedBlockStart.gif  
{
InBlock.gif   
try
ExpandedSubBlockStart.gif   
{
InBlock.gif    mythread 
= new Thread(new ThreadStart(ThreadWork));
InBlock.gif    mythread.Start();    
ExpandedSubBlockEnd.gif   }

InBlock.gif   
catch(System.Exception ex)
ExpandedSubBlockStart.gif   
{
InBlock.gif    MessageBox.Show(
this,ex.Message,"提示",MessageBoxButtons.OK,MessageBoxIcon.Information);
ExpandedSubBlockEnd.gif   }
   
ExpandedBlockEnd.gif  }

None.gif 
None.gif  
void  ThreadWork()
ExpandedBlockStart.gif  
{
InBlock.gif   
this.dataGridDJ.CaptionText="正在查询电价数据dot.gif";
InBlock.gif   mf.statusBarPanel1.Text
="正在查询电价数据dot.gif";
InBlock.gif   
this.Cursor=Cursors.WaitCursor;
InBlock.gif 
InBlock.gif
InBlock.gif   
string shijian=this.dateTimeDianJia.DateValue;
InBlock.gif   DateTime today
=DateTime.Today;
InBlock.gif   
string mingcheng=this.txtMingCheng.Text;
InBlock.gif   
string leibie=this.cmbBoxLiebie_DJ.SelectedValue.ToString();
InBlock.gif   PowerWeb.BLL.DianFeiDianJia.DianJia dj
=new PowerWeb.BLL.DianFeiDianJia.DianJia();
InBlock.gif 
InBlock.gif   
if(shijian==today.ToString("yyyyMM"))
ExpandedSubBlockStart.gif   
{
InBlock.gif    dt
=dj.GetList(leibie,mingcheng).Tables[0];
ExpandedSubBlockEnd.gif   }

InBlock.gif   
else
ExpandedSubBlockStart.gif   
{
InBlock.gif    dt
=dj.GetListOld(leibie,mingcheng,shijian).Tables[0];
ExpandedSubBlockEnd.gif   }

InBlock.gif   
this.dataGridDJ.CaptionText=shijian+"电价信息 (共计条"+dt.Rows.Count.ToString()+"记录)";
InBlock.gif 
InBlock.gif   dataGridDJ.BeginInvoke(
new myDelegate(FillData));//异步调用(来填充)
InBlock.gif
   
InBlock.gif   
this.Cursor=Cursors.Default;
InBlock.gif   mf.statusBarPanel1.Text
="查询结束";
ExpandedBlockEnd.gif  }

None.gif  
None.gif  
private   void  FillData()
ExpandedBlockStart.gif  
{
InBlock.gif   
this.dataGridDJ.DataSource=dt.DefaultView;
ExpandedBlockEnd.gif  }

None.gif



本文转自高海东博客园博客,原文链接:http://www.cnblogs.com/ghd258/archive/2006/02/15/330834.html,如需转载请自行联系原作者
相关文章
|
29天前
|
前端开发 网络安全
layui如何实现添加数据时关闭页面层,并实时刷新表格数据?
layui如何实现添加数据时关闭页面层,并实时刷新表格数据?
15 0
|
5月前
|
开发者
SAP UI5 控件双向数据绑定后显示数据出问题,可以调试这个方法
SAP UI5 控件双向数据绑定后显示数据出问题,可以调试这个方法
28 0
|
6月前
|
JavaScript 前端开发 Java
42jqGrid 实时数据处理-新增行
42jqGrid 实时数据处理-新增行
17 0
|
7月前
|
JSON 数据格式
通过一个具体的例子,深入了解 SAP UI5 控件数据双向绑定的工作原理和问题排查方法试读版
通过一个具体的例子,深入了解 SAP UI5 控件数据双向绑定的工作原理和问题排查方法试读版
31 0
|
资源调度 前端开发
让后台查询+表格这种页面更加快速和简便
让后台查询+表格这种页面更加快速和简便
103 0
|
数据可视化 Oracle 关系型数据库
报表功能升级|新增的这4项图表组件太太太好用了吧!
你们要的交叉透视表、词云、日历热力图、雷达图安排上啦~
466 0
报表功能升级|新增的这4项图表组件太太太好用了吧!
[导入]Repeater与DataGrid的效率,到底哪个的更好?!(结论很可能和你认为的不一样!)
Repeater与DataGrid的效率,到底哪个的更好?!文章来源:http://blog.csdn.net/jyk/archive/2006/03/15/625389.aspx
692 0