工作表标签
[示例01] 设置工作表标签的颜色
Sub SetSheetTabColor()
MsgBox "设置当前工作表标签的颜色"
ActiveSheet.Tab.ColorIndex = 7
End Sub
[示例02]恢复工作表标签颜色
Sub SetSheetTabColorDefault()
MsgBox "将当前工作表标签颜色设置为默认值"
ActiveSheet.Tab.ColorIndex = -4142
End Sub
[示例03]交替隐藏或显示工作表标签
Sub HideOrShowSheetTab()
MsgBox "隐藏/显示工作表标签"
ActiveWindow.DisplayWorkbookTabs = Not ActiveWindow.DisplayWorkbookTabs
End Sub
|
一.Range属性 1.选择单个单元格(例如A5) Range("A5").Select 2.选择一个单元格区域(例如A6:A10) Range("A6:A10").Select 3.选择一些不相邻的单元格(例如A1,B6,C8) Range("A1,B6,C8").Select 4.选择一些不相邻的单元格和单元格区域(例如A11:D11,B7,C9) Range("A11:D11,B7,C9").Select 二.Cells属性 1.选择单个单元格(例如A5) Cells(5,1).Select Cells(5,A).Select 2.选择一个单元格区域(例如A6:A10) Range(Cells(6,1),Cells(10,1)).Select 3.选择工作表中的所有单元格 Cells.Select 三.Offset属性 1.选择单元格A1下面一行和右边三列的单元格 Range("A1").Offset(1,3).Select 2.选择单元格D15上面两行和左边一列的单元格 Range("D15").Offset(-2,-1).Select 3.选择同列单元格(上一行) ActiveCell.Offset(-1,0).Select 4.重新选取区域 ActiveCell.Offset(2,2).Resize(2,4).Select 四.END属性(移动到连续有内容的单元格) 1.选择任何行的最后一个单元格 ActiveCell.End(xlToRight).Select 2.选择任何行的最前一个单元格 ActiveCell.End(xlToLeft).Select 3.选择任何列的最后一个单元格 ActiveCell.End(xlDown).Select 4.选择任何列的最前一个单元格 ActiveCell.End(xlUp).Select |
CurrentRegion属性代表什么
您可能经常在程序代码中看到CurrentRegion属性,它是一个非常有用的属性,返回活动单元格所在的周围由空行和空列组成的单元格区域(即通常所说的当前区域),如图1所示。
图1
具体地说,当前区域即活动单元格所在的矩形区域,该矩形区域的每一行和每一列中至少包含有一个数据,其周围是空行和空列,图1中列举了其中的4种情形(见蓝色阴影区域)。在当前区域范围内,不管活动单元格是哪一个单元格,其所在的当前区域均为同一区域,如上例中的B5:D7区域,活动单元格B5的当前区域为B5:D7,当活动单元格为C6时,其当前区域仍为B5:D7。
使用CurrentRegion属性相当于在Excel工作表中选择菜单“编辑——定位”命令,在弹出的“定位”对话框中单击“定位条件”按钮,然后在“定位条件”对话框中选中“当前区域”选项按钮,或者相当于使用Ctrl+Shift+*组合键。
CurrentRegion属性的一些基本应用
CurrentRegion属性可用于很多操作,下面通过如图2所示的工作表示例讲解该属性的应用。
图2
(1) 返回指定(或活动)单元格所在区域中标题行的行数
Worksheets("sheet1").Range("H2").Value = _
Worksheets("sheet1").Range("A1").CurrentRegion.ListHeaderRows
上述代码在示例工作表中运行后,将返回“1”,即单元格A1所在区域的标题行的行数为1。
(2) 返回指定(或活动)单元格所在区域的行数
Worksheets("sheet1").Range("H3").Value = _
Worksheets("sheet1").Range("A1").CurrentRegion.Rows.Count
上述代码在示例工作表中运行后,将返回“11”,即单元格A1所在区域的行数为11。
(3) 返回指定(或活动)单元格所在区域的列数
Worksheets("sheet1").Range("H4").Value = _
Worksheets("sheet1").Range("A1").CurrentRegion.Columns.Count
上述代码在示例工作表中运行后,将返回“4”,即单元格A1所在区域的列数为4。
(4) 返回指定(或活动)单元格所在区域的单元格数
Worksheets("sheet1").Range("H5").Value = _
Worksheets("sheet1").Range("A1").CurrentRegion.Cells.Count
上述代码在示例工作表中运行后,将返回“44”,即单元格A1所在区域的单元格数为44。
(5) 在指定(或活动)单元格所在区域中选取除标题行以外的数据区域
Worksheets("sheet1").Range("A1").CurrentRegion.Resize( _
Worksheets("sheet1").Range("A1").CurrentRegion.Rows.Count - Worksheets("sheet1"). _
Range("A1").CurrentRegion.ListHeaderRows, Worksheets("sheet1").Range("A1").CurrentRegion. _
Columns.Count).Offset(1, 0).Select
上述代码在示例工作表中运行后,将选取单元格A1所在区域中除标题行外的数据区域,即单元格区域A2:D11。
下面,将上述代码综合成一个完整的示例以演示CurrentRegion属性的一些用法。程序代码如下:
Sub testCurrentRegion()
Dim rng As Range, ws As Worksheet
Set ws = ActiveWorkbook.Worksheets("sheet1")
Set rng = ws.Range("A1").CurrentRegion
ws.Range("G2") = "当前区域标题行数"
ws.Range("H2").Value = rng.ListHeaderRows
ws.Range("G3") = "当前区域的行数"
ws.Range("H3").Value = rng.Rows.Count
ws.Range("G4") = "当前区域的列数"
ws.Range("H4").Value = rng.Columns.Count
ws.Range("G5").Value = "当前区域的单元格数"
ws.Range("H5").Value = rng.Cells.Count
ws.Columns("G:G").EntireColumn.AutoFit
MsgBox "选取当前区域中除标题行以外的区域"
rng.Resize(rng.Rows.Count - rng.ListHeaderRows, rng.Columns.Count).Offset(1, 0).Select
End Sub
运行后的结果如下图3所示,示例文档见 CurrentRegion属性示例.xls。
图3
(6) 复制当前区域的数据到另一位置
Sub CopyCurrentRegion()
Sheets("sheet1").Range("A1").CurrentRegion.Copy Sheets("sheet2").Range("A1")
End Sub
上述代码将工作表Sheet1中单元格A1所在的区域复制到工作表sheet2中以单元格A1开始的单元格区域中。
(7) 格式化当前区域中的数据
Sub FormatCurrentRegion()
With ActiveCell.CurrentRegion
.Font.Bold = True
.Font.ColorIndex = 3
End With
End Sub
上述代码将工作表中活动单元格所在区域数据加粗且设置为红色。
(8) 在当前区域中自动套用格式
Sub testAutoFormatCurrentRegion()
Worksheets("sheet1").Range("A1").CurrentRegion.AutoFormat
End Sub
上述代码将在工作表sheet1中单元格A1所在区域自动套用默认的格式,当然,您可以设置所需套用的格式,默认值为xlRangeAutoFormatClassic1。
一些示例
[示例1] 在当前区域中查找空白单元格并填充
如下图4所示的工作表,现在要使用空白单元格上方的有数据的单元格中的数据来填充空白单元格。
图4
可以编写如下的代码:
Sub FillBlankCells()
Worksheets("sheet1").Range("A1").CurrentRegion. _
SpecialCells(xlCellTypeBlanks).FormulaR1C1 = "=R[-1]C"
Worksheets("sheet1").Range("A1").CurrentRegion.Value = _
Worksheets("sheet1").Range("A1").CurrentRegion.Value
End Sub
运行代码后,工作表中单元格A1所在区域中的空白单元格被相应数据填充,如图5所示。
图5
[示例2] 一个排序的简单示例
如图6所示的工作表,现在对第3列进行排序,按降序排列。
图6
编写的代码如下:
Sub testSort()
Dim rng As Range
Set rng = Worksheets("sheet1").Cells(1, 1).CurrentRegion
rng.Sort Key1:=rng.Cells(1, 3), Order1:=xlDescending, Header:=xlYes
End Sub
运行代码后,工作表中的数据将按照第3列的数据从大到小进行排列,如图7所示。
图7
小结
1、CurrentRegion属性的基本语法为:
<单元格对象>.CurrentRegion
2、可以先使用CurrentRegion属性返回指定单元格或者活动单元格所在的区域,然后使用其它的属性对该区域的数据进行操作。
![]() |
![]() |
![]() |
![]() |
| <configuration xmlns= "http://schemas.microsoft.com/.NetConfiguration/v2.0"> <appSettings/> <connectionStrings> <add name="NorthWindConn" connectionString="Server=(local);Integrated Security=True; Database=Northwind;Persist Security Info=True" providerName="System.Data.SqlClient" /> </connectionStrings>... |
接着,点"NEXT"到下一步,
此时,你可以选择要显示的列,如下图:

点"next"到下一步,此时可以看到系统为你自动生成的sql语句,最后点"FINISH"结束操作。

这样,已经建立好数据连接了,我们可以切换到代码视图,查看刚才系统创建的代码如下,其中请注意对connectionstring的引用格式。
<asp:SqlDataSource ID="SqlDataSource1"
Runat="server"
SelectCommand="SELECT [ProductID], [ProductName], [SupplierID],
[CategoryID], [QuantityPerUnit], [UnitPrice] FROM
[Alphabetical list of products]"
ConnectionString="<%$ ConnectionStrings: NorthWindConn %>">
</asp:SqlDataSource>
第二步要做的是,将gridview控件和sqldatasource控件绑定。先拖拉一个gridview控件到设计窗口中,并且在选择sqldatasource1做为它的数据源,并且将Enable paging,Enable sorting,Enable selection等三个选择框都选择,之后我们就可以马上看到其效果了,如下图

最后,运行程序,可以看到运行的效果了。
接下来,我们学习如何编辑和删除数据。这时我们要用到UpdateCommand 和 DeleteCommand两个属性,分别指明更新数据和删除数据要用到的sql语句,要修改sqldatasource的代码如下:
<asp:SqlDataSource ID="SqlDataSource1" Runat="server"
SelectCommand="SELECT [ProductID], [ProductName], [SupplierID], [CategoryID],
[QuantityPerUnit], [UnitPrice] FROM [Alphabetical list of products]"
ConnectionString="<%$ ConnectionStrings:NorthWindConn %>"
UpdateCommand="UPDATE Products SET ProductName = @ProductName,
SupplierID= @SupplierID, CategoryID =@CategoryID , QuantityPerUnit = @QuantityPerUnit ,
UnitPrice = CONVERT(money,@UnitPrice) WHERE ProductID=@ProductID"
DeleteCommand="DELETE FROM Products WHERE ProductID=@ProductID">
</asp:SqlDataSource>
运行程序,效果如下图:

最后,我们再来看一个叫detailviews的数据控件,它与gridview控件的用法类似,但不 同的是,每次只显示一条记录。将工具栏中的detailviews控件拖拉到设计窗体中,并设置其数据源为sqldatasource1,并选择其分页的选择框,如下图:

而如何往gridview中插入一条新记录呢?在beta 1版本中,gridview暂时不提供自动增加的功能,但可以通过其他方法实现,比如,在sqldatasource的代码中使用insertcommand属性,代码如下:
<asp:SqlDataSource ID="SqlDataSource1" Runat="server"
SelectCommand="SELECT [ProductID], [ProductName], [SupplierID], [CategoryID],
[QuantityPerUnit], [UnitPrice] FROM [Products]"
ConnectionString="<%$ ConnectionStrings:NorthWindConn %>"
UpdateCommand="UPDATE Products SET ProductName = @ProductName,
SupplierID= @SupplierID, CategoryID = @CategoryID ,
QuantityPerUnit = @QuantityPerUnit , UnitPrice = CONVERT(money,@UnitPrice)
WHERE (ProductID=@ProductID)"
DeleteCommand="DELETE FROM Products WHERE ProductID=@ProductID"
InsertCommand="INSERT INTO Products (ProductName, SupplierID, CategoryID,
QuantityPerUnit, UnitPrice) VALUES (@ProductName, @SupplierID, @CategoryID,
@QuantityPerUnit,CONVERT(money,@UnitPrice))">
</asp:SqlDataSource>
当完成上面的代码后,detailviews控件的自动智能感知提示,会显示enable inserting的选择框,只需要勾选该选择框就可以新增记录了,效果如下图:

本文简单对asp.net 2.0中的gridview控件及其基本用法做了介绍,相信在正式版的vs.net 2005中,gridview控件将有更大的改进。
原文出处:http://www.webjx.com/htmldata/2005-03-11/1110510758.html
ASP.NET 2.0中,新增加的gridview控件的确十分强大,弥补了在asp.net 1.1中,使用datagrid控件时的不足之处。因为在asp.net 1.1中,在使用datagrid时,很多情况下依然要编写大量的代码,十分不方便,而且有时需要很多技巧。而在asp.net 2.0中,很多情况下,使用gridview控件的话,甚至只需要拖拉控件,设置属性就可以了,不需要编写任何代码。在《使用ASP.NET 2.0中的GridView控件》和《ASP.NET2.0中用Gridview控件操作数据》中,已经对gridview控件做了一系列介绍,如果之前没有了解过gridview的读者,请先阅读这两篇文章。在本文中,将继续深入介绍gridview的一些使用技巧。
一 格式化gridview
和asp.net 1.1一样,gridview可以很方便地定制其样式,比如css,颜色等。要定制gridview的格式,十分简单,只需要鼠标右击gridview,在弹出的菜单中选择"AUTO FORMAT",则可以选择gridview的样式,内置了许多样式,如下图:

如果你要对gridview中每一列自定义格式,则只需要点击gridview右上角的"smart tag"智能标记,在弹出的菜单中,选择"edit columns",会弹出如下图的窗体,这样就可以对每列进行详细的设置了:

比如,如果要某一列设置为特殊格式,如要将unitprice设置为货币格式,可以在unitprice列的DataFormatString属性中设置为{0:C},程序代码如下:
程序运行后结果如下:

而有的时候,我们可能要根据需要,对gridview中的数据进行特殊的显示,比如当某样商品库存为0时,要求gridview中以不同颜色进行显示,这时,可以按如下的方法进行:
首先,gridview提供了rowdatabound事件,该事件在gridview中每行被创建并且绑定到datasource控件后被触发,因此,我们可以利用该事件去检查库存是否为0,如果为0的话,将所在行的北京颜色设置为黄色,代码如下:
首先,该事件首先检查,当前的行是否属于datarow类型的行,因为象gridview中的headerrow,footerrow等行,并不包含实际的数据,因此,我们不需要使用headerrow和footerrow,而为了取得库存unitesinstock的内容,通过使用databinder.eval的方法取出其内容,并转换为int类型,接着判断是否为0,如果为0的话,则设置其行的背景颜色为黄色。程序运行结果如下图所示:

二 gridview的分页和排序
在asp.net 1.1中,datagrid分页是很常见的。而在asp.net 2.0中,依然有两种分页方式,一种是默认的分页方式,比如,有1000条数据,每页显示10条数据,则每次页面请求都必须从数据库中将1000条数据读取出来,只不过每次显示一页时,显示10条数据,速度和性能会降低。另一种是自定义分页方式,比如1000条数据,每页显示10条数据,则程序每次在页面跳转时,只会从数据库中拿10条数据出来显示给用户,而不是每次都把1000条数据拿出来,因此性能大为提高。
在asp.net 2.0中,使用sqldatasource控件进行分页是十分容易的事情。Sqldatasource数据源控件是用来与数据库打交道的,可以读取数据库中的数据,并可以和gridview等控件进行绑定。在下面的演示中,首先拖拉一个sqldatasource控件,并且设置其数据源为sql server 中的northwind数据库,再拖拉一个gridview控件,并且点gridview的smart tag智能标记,在弹出的菜单中,选择"enable paging"和"enable sorting",即允许分页和排序,则可以完成分页和排序的功能了,是不是很简单呢?如下图所示:

而在分页的效果中,有时我们想让用户知道,目前正在浏览的是第几页,那么要如何实现呢?在gridview中,有一个pageindex的属性,指示页面的序号(从0开始),则只需在页面的html代码内,写下如下代码,即可实现效果:
完整代码如下:
实现的效果如下图所示:

注意的是,可以点击gridview中各字段的名称,如product,unit price,等进行排序,十分方便。如果要对分页时每页显示多少条数据进行显示,则只需要设置gridview的pagesize属性就可以了。
三 在gridview中使用图片
在asp.net 1.1中,如果要使用图片的话,需要设置templatecolumn模版列。而在asp.ne 2.0中,则提供了imagefield列可以显示gridview中的图片。下面,我们设计一个简单的相册列表,让大家了解如何在gridview中使用图片,其中,数据表的结果如下,并且已经假设用户已经上传了相片,因此着重讨论如何在gridview中显示图片
· PictureID-图片的序号,自动递增.
· Title-图片的标题
· DateAdded-图片上传日期
· PictureUrl-图片上传后的相对路径
接下来,我们拖拉一个gridview到IDE环境中去,设置将其与sqldatasource绑定。由于我们要在gridview中显示的是实际的图片,因此我们首先选gridview的smart tag标记,在弹出的菜单中选择"edit columns",之后将pictureurl绑定字段移除,添加一个ImageField绑定字段,并且将ImageField字段的dataimageurlfield属性设置为PictureURL字段,用来显示图片的路径,如下图所示:

下面是相关HTML部分的代码:
我们并且通过手动编写代码的方式,创建数据表,如下代码所示:
程序运行后,结果如下图所示

<%@ Page Language="C#" %>
<%@ Import Namespace="System.IO" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
<script runat="server">
void Treeview1_TreeNodePopulate(object sender, TreeNodeEventArgs e)
{
if (IsCallback)
if (e.Node.ChildNodes.Count == 0)
{
LoadChildNode(e.Node);
}
}
private void LoadChildNode(TreeNode node)
{
DirectoryInfo directory;
directory = new DirectoryInfo(node.Value);
foreach (DirectoryInfo sub in directory.GetDirectories())
{
TreeNode subNode = new TreeNode(sub.Name);
subNode.Value = sub.FullName;
try
{
if (sub.GetDirectories().Length > 0 || sub.GetFiles().Length > 0)
{
subNode.SelectAction = TreeNodeSelectAction.SelectExpand;
subNode.PopulateOnDemand = true;
subNode.NavigateUrl = "#";
}
}
catch { subNode.ImageUrl = "WebResource.axd?a=s&r=TreeView_XP_Explorer_ParentNode.gif&t=632242003305625000"; }
node.ChildNodes.Add(subNode);
}
foreach (FileInfo fi in directory.GetFiles())
{
TreeNode subNode = new TreeNode(fi.Name);
node.ChildNodes.Add(subNode);
}
}
</script>
<html xmlns="http://www.w3.org/1999/xhtml" >
<head runat="server">
<title>Untitled Page</title>
</head>
<body bgcolor="white">
<form id="form1" runat="server">
<div>
<asp:treeview ID="Treeview1" runat="server" ImageSet="XPFileExplorer" AutoGenerateDataBindings="false" ExpandDepth=0
OnTreeNodePopulate="Treeview1_TreeNodePopulate"
>
<SelectedNodeStyle BackColor="#B5B5B5"></SelectedNodeStyle>
<Nodes>
<asp:TreeNode Value="C:" Text="C:" PopulateOnDemand="true" SelectAction="Select" NavigateUrl="#" >
</asp:TreeNode>
</Nodes>
<NodeStyle VerticalPadding="2" Font-Names="Tahoma" Font-Size="8pt" HorizontalPadding="2"
ForeColor="Black"></NodeStyle>
<HoverNodeStyle Font-Underline="True" ForeColor="#6666AA"></HoverNodeStyle>
</asp:treeview>
</div>
</form>
</body>
</html>
引用原文:http://www.xrss.cn/Info/2627.Html