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;
}
查看全文
相关阅读:
Android开发——嘀咕客户端Demo版
Android开发——对sdcard扩展卡文件操作
Android开发——数据存储之ContentProvider(1)
Android开发——应用程序生命周期
Android开发——多媒体开发之MediaPlayer
Android开发——Intent
Windows环境下Apache的reverse proxy报OS 10048的原因和解决办法
windows下,Unable to load dynamic library php_mcrypt
一些Arduino 测试代码
字符串转化为16进制内容
原文地址:https://www.cnblogs.com/ghd258/p/330834.html
最新文章
Android应用开发之Android selector下的属性值
java 去除字符串中的html代码
Java中Clob类型转String
用Collections.sort方法对现有的List重新进行排序
Oracle部分函数用法
Oracle复制表sql语句
Jquery选择器 input 和 :input的区别
Ubuntu12.10 64位系统安装以及配置java、jdk环境变量
jquery placeholder插件实现HTML5属性placeholder效果
Oracle中 nls_sort 和 nlssort 排序功能
热门文章
让你的程序只运行一个实例(二)
sublime_text配置微软编译器(cl)
IIS7.5 配置不显示css与图片的解决办法
C#实现Dll(OCX)控件自动注册的两种方法(转)
C# 操作系统防火墙(续集)
让你的程序只运行一个实例
Android开发——通知Notification
Android开发——数据存储之ContentProvider(2)
入住博客园
Android开发——HTTP通讯
Copyright © 2011-2022 走看看