zoukankan
html css js c++ java
DataGrid 功能实现收集(二)
datagrid中打开新窗体
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');
"
);
跨页面实现多选
SelectMultiPages.aspx
<%
@ Page EnableViewState
=
"
true
"
CodeBehind
=
"
SelectMultiPages.aspx.cs
"
Language
=
"
c#
"
AutoEventWireup
=
"
false
"
Inherits
=
"
eMeng.Exam.SelectMultiPages
"
%>
<!
DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"
>
<
HTML
>
<
HEAD
>
<
title
>
跨页面实现多选
</
title
>
<
META
http-equiv
="content-type"
content
="text/html; charset=gb2312"
>
<
style
>
*
{
}
{
FONT-SIZE
:
12PX
}
#Status
{
}
{
text-align
:
left
}
</
style
>
<
script
language
="JAVASCRIPT"
>
function
AddRemoveValues(oChk)
{
//
在处理这个地方需要注意的是:你保存的值应该具有唯一性,这样才能不会替换错误的项。
if
(oChk.checked)
SelectMultiPage.HdnSelectedValues.value
+=
"
,
"
+
oChk.value;
else
SelectMultiPage.HdnSelectedValues.value
=
SelectMultiPage.HdnSelectedValues.value.replace(
"
,
"
+
oChk.value,
""
);
}
</
script
>
</
HEAD
>
<
BODY
>
<
form
id
="SelectMultiPage"
runat
="server"
>
<
asp:datagrid
id
="DataGrid1"
HorizontalAlign
="Center"
AutoGenerateColumns
="False"
Width
="600px"
AllowPaging
="True"
runat
="server"
>
<
AlternatingItemStyle
BackColor
="#EEEEEE"
></
AlternatingItemStyle
>
<
HeaderStyle
BackColor
="#AAAADD"
Font-Bold
="True"
HorizontalAlign
="Center"
></
HeaderStyle
>
<
PagerStyle
HorizontalAlign
="Right"
Mode
="NumericPages"
Visible
="True"
></
PagerStyle
>
<
Columns
>
<
asp:TemplateColumn
HeaderText
="选择"
>
<
ItemTemplate
>
<
input
type
="checkbox"
runat
="server"
id
="chkSelect"
onclick
="AddRemoveValues(this)"
value
='<%#DataBinder.Eval(Container.DataItem,"Title")%
>
'/>
</
ItemTemplate
>
</
asp:TemplateColumn
>
<
asp:TemplateColumn
HeaderText
="文章标题"
>
<
ItemTemplate
>
<
asp:Literal
Text
='<%#
DataBinder.Eval(Container.DataItem, "Title") %
>
' runat="server" ID="TitleShow"/>
</
ItemTemplate
>
</
asp:TemplateColumn
>
<
asp:TemplateColumn
HeaderText
="发布时间"
>
<
ItemTemplate
>
<
asp:Literal
Text
='<%#
DataBinder.Eval(Container.DataItem, "CreateDate").ToString() %
>
' runat="server"/>
</
ItemTemplate
>
</
asp:TemplateColumn
>
</
Columns
>
</
asp:datagrid
>
<
div
align
=center
>
<
asp:button
id
="Button1"
runat
="server"
Text
="得到所选的值"
></
asp:button
>
<
div
id
="Status"
>
<
asp:label
id
="Label1"
runat
="server"
></
asp:label
>
</
div
>
<
INPUT
id
="HdnSelectedValues"
type
="hidden"
name
="HdnSelectedValues"
runat
="server"
>
</
div
>
</
form
>
</
BODY
>
</
HTML
>
SelectMultiPages.aspx.cs
using
System;
using
System.Collections;
using
System.ComponentModel;
using
System.Data;
using
System.Data.OleDb;
using
System.Drawing;
using
System.Web;
using
System.Web.SessionState;
using
System.Web.UI;
using
System.Web.UI.WebControls;
using
System.Web.UI.HtmlControls;
namespace
eMeng.Exam
{
/**/
///
<summary>
///
SelectMultiPages 的摘要说明。
///
</summary>
public
class
SelectMultiPages : System.Web.UI.Page
{
protected
System.Web.UI.WebControls.Button Button1;
protected
System.Web.UI.WebControls.Label Label1;
protected
System.Web.UI.HtmlControls.HtmlInputHidden HdnSelectedValues;
protected
System.Web.UI.WebControls.DataGrid DataGrid1;
private
void
Page_Load(
object
sender, System.EventArgs e)
{
//
在此处放置用户代码以初始化页面
if
(
!
Page.IsPostBack)
BindData();
}
private
void
DataGrid1_PageIndexChanged(
object
source, DataGridPageChangedEventArgs e)
{
DataGrid1.CurrentPageIndex
=
e.NewPageIndex;
BindData();
}
void
BindData()
{
OleDbConnection cn
=
new
OleDbConnection(
"
Provider=Microsoft.Jet.OLEDB.4.0;Data Source=
"
+
HttpContext.Current.Server.MapPath(
"
aspx.mdb
"
));
OleDbDataAdapter da
=
new
OleDbDataAdapter(
"
Select Title, CreateDate from Document
"
,cn);
DataSet ds
=
new
DataSet();
da.Fill(ds);
DataGrid1.DataSource
=
ds;
DataGrid1.DataBind();
}
private
void
DataGrid1_ItemDataBound(
object
sender, System.Web.UI.WebControls.DataGridItemEventArgs e)
{
//
重新显示所选择的项目
if
(e.Item.ItemType
==
ListItemType.Item
||
e.Item.ItemType
==
ListItemType.AlternatingItem)
{
if
(HdnSelectedValues.Value.IndexOf(((Literal)e.Item.Cells[
1
].FindControl(
"
TitleShow
"
)).Text)
>=
0
)
{
HtmlInputCheckBox ChkSelected
=
(HtmlInputCheckBox)(e.Item.Cells[
0
].FindControl(
"
ChkSelect
"
));
ChkSelected.Checked
=
true
;
}
}
}
private
void
Button1_Click(
object
sender, System.EventArgs e)
{
//
为了显示的方便进行替换的
Label1.Text
=
HdnSelectedValues.Value.Replace(
"
,
"
,
"
<li>
"
);
}
Web 窗体设计器生成的代码
#region
Web 窗体设计器生成的代码
override
protected
void
OnInit(EventArgs e)
{
//
//
CODEGEN: 该调用是 ASP.NET Web 窗体设计器所必需的。
//
InitializeComponent();
base
.OnInit(e);
}
/**/
///
<summary>
///
设计器支持所需的方法 - 不要使用代码编辑器修改
///
此方法的内容。
///
</summary>
private
void
InitializeComponent()
{
this
.DataGrid1.ItemDataBound
+=
new
System.Web.UI.WebControls.DataGridItemEventHandler(
this
.DataGrid1_ItemDataBound);
this
.DataGrid1.PageIndexChanged
+=
new
System.Web.UI.WebControls.DataGridPageChangedEventHandler(
this
.DataGrid1_PageIndexChanged);
this
.Button1.Click
+=
new
System.EventHandler(
this
.Button1_Click);
this
.Load
+=
new
System.EventHandler(
this
.Page_Load);
}
#endregion
}
}
如何给DataGrid添加自动增长列
我们用Northwind数据库做例子:
html页面的DataGrid如下所示:
<
asp:datagrid
id
="grdTest"
runat
="server"
Height
="228px"
Width
="262px"
AutoGenerateColumns
="False"
AllowPaging
="True"
>
<
Columns
>
<
asp:TemplateColumn
>
<
ItemTemplate
>
<!--
这里是关键
-->
<
SPAN
>
<%
# Container.ItemIndex
+
1
%>
</
SPAN
>
</
ItemTemplate
>
</
asp:TemplateColumn
>
<
asp:BoundColumn
DataField
="CategoryName"
></
asp:BoundColumn
>
<
asp:BoundColumn
DataField
="Description"
></
asp:BoundColumn
>
</
Columns
>
</
asp:datagrid
>
下面我们可以写他的后台代码cs的文件了我们在它的Page_Load里面添加绑定方法如下所示:
private void Page_Load(object sender, System.EventArgs e)
{
// 在此处放置用户代码以初始化页面
strConnection = ConfigurationSettings.AppSettings["sa"].ToString();
myConnection = new SqlConnection(strConnection);
SqlDataAdapter myAdapter = new SqlDataAdapter("SELECT CategoryName, Description FROM Categories",myConnection);
// 为了分页方便ds是一个全局的变量
myAdapter.Fill(ds);
this.grdTest.DataSource = ds.Tables[0].DefaultView;
this.grdTest.DataBind();
}
从上面的过程可以看出我们使用的是表Categories,这样我们就可以产生一列自增长的列,此列是从1开始的。如果我们想要一个从0开始的列有该怎么办呢?我们可以把
<!--
这里是关键
-->
下面的
<
span
>
里面的东西换成
<
asp:Label
id
=lblRowNumber
runat
="server"
Text
='<%#
DataBinder.Eval(Container, "ItemIndex", "{0}") %
>
'>就可以了。
如果我们想要实现分页也显示的方法我们将使用DataTable的方法来实现,首先我们将DataGrid的列全部变成绑定列(为了方便演示,不是必须)。如下所示:
<
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
/>
<
asp:datagrid
id
="grdTest"
runat
="server"
Height
="228px"
Width
="262px"
AutoGenerateColumns
="False"
PageSize
="2"
AllowPaging
="True"
>
<
Columns
>
<
asp:BoundColumn
DataField
="RowNumber"
HeaderText
="RowNumber"
></
asp:BoundColumn
>
<
asp:BoundColumn
DataField
="CategoryName"
></
asp:BoundColumn
>
<
asp:BoundColumn
DataField
="Description"
></
asp:BoundColumn
>
</
Columns
>
</
asp:datagrid
>
在后台我们添加一个函数:
private DataTable GetRowNumberTable(DataTable dt){
DataColumn col = new DataColumn("RowNumber",Type.GetType("System.Int32"));
dt.Columns.Add(col);
for(int i = 0;i
<
=dt
.Rows.Count-1;i++){
if(0
==
i)
dt.Rows[i][col]
= 1;
else
dt.Rows[i][col]
= Convert.ToInt32(dt.Rows[i-1][col])
+1;
}
return dt;
}
然后我们将原来数据源改成如下:
this.grdTest.DataSource
= this.GetRowNumberTable(ds.Tables[0]).DefaultView;
这样一来即使分页,数字也是连续的,并且将编号应用于所有的行而不是当前这一页的行。
在多线程里查询数据库并填充dataGrid
在查询大数据量时,窗体界面会不动,“正在查询
”的提示也不能显示。所以打算用多线程来实现,
可是当在线程里面执行到
this
.dataGridDF.DataSource
=
dt.DefaultView;填充数据
时却提示报错,说什么该线程不能调用主线程创建的控件等等。
后来查了许多资料,终于搞定。可以在查询数据库时操作别的了,“正在查询
”的提示也显示了。
//
或者在前面用一个线程查询,在线程里调用dataGrid.BeginInvoke(异步方法)来单独填充
public
delegate
void
myDelegate();
DataTable dt;
private
void
btnDianJia_Click(
object
sender, System.EventArgs e)
{
try
{
mythread
=
new
Thread(
new
ThreadStart(ThreadWork));
mythread.Start();
}
catch
(System.Exception ex)
{
MessageBox.Show(
this
,ex.Message,
"
提示
"
,MessageBoxButtons.OK,MessageBoxIcon.Information);
}
}
void
ThreadWork()
{
this
.dataGridDJ.CaptionText
=
"
正在查询电价数据
"
;
mf.statusBarPanel1.Text
=
"
正在查询电价数据
"
;
this
.Cursor
=
Cursors.WaitCursor;
string
shijian
=
this
.dateTimeDianJia.DateValue;
DateTime today
=
DateTime.Today;
string
mingcheng
=
this
.txtMingCheng.Text;
string
leibie
=
this
.cmbBoxLiebie_DJ.SelectedValue.ToString();
PowerWeb.BLL.DianFeiDianJia.DianJia dj
=
new
PowerWeb.BLL.DianFeiDianJia.DianJia();
if
(shijian
==
today.ToString(
"
yyyyMM
"
))
{
dt
=
dj.GetList(leibie,mingcheng).Tables[
0
];
}
else
{
dt
=
dj.GetListOld(leibie,mingcheng,shijian).Tables[
0
];
}
this
.dataGridDJ.CaptionText
=
shijian
+
"
电价信息 (共计条
"
+
dt.Rows.Count.ToString()
+
"
记录)
"
;
dataGridDJ.BeginInvoke(
new
myDelegate(FillData));
//
异步调用(来填充)
this
.Cursor
=
Cursors.Default;
mf.statusBarPanel1.Text
=
"
查询结束
"
;
}
private
void
FillData()
{
this
.dataGridDJ.DataSource
=
dt.DefaultView;
}
查看全文
相关阅读:
wdcp升级php和mysql
centos安装中文支持(转)
centos5.5用phpstudy一键安装配置虚拟主机后,yum配置代理服务器squid
http status 汇总
关于html标签元素的data-*属性
[分 享] PHPCMS V9 更换域名,附件地址无法批更新(更换变便)问题>解决方法!!
svn服务器配置小记
Camstar Portal modeling user guid --设置本地时间
msdn webcast 下载地址整理
mvc 项目下 webservice 程序无法运行
原文地址:https://www.cnblogs.com/ghd258/p/330834.html
最新文章
BLOB类型对应Long binary,CLOB对应Long characters
[sS]*?懒惰模式特殊情形
递归获取文件夹下特定文件
设置标题级别
两个[\s\S]*?之间可为空元素没有意义
name和code的相关设置
C#操作Word的超详细总结
正则 ?<= 和 ?= 用法 以及零宽断言等概念
命名分组(?<name>....)
大sd卡 裂开了,写保护掉了。重新装好后,被写保护的解决办:
热门文章
玩具车 旋钮开关的修理
Delphi Tokyo 10.2.3发布了
【Unity编程】欧拉角与万向节死锁(图文版)
向量叉积定义的证明
小米平板突然黑屏 摁哪也没反应
施密特正交化的几何解释
ActionList及Action使用
dcef3 指出一个坑
C#, Java, PHP, Python和Javascript几种语言的AES加密解密实现[转载]
(转载)JS中的prototype
Copyright © 2011-2022 走看看