c#--gridview

GridView的用法

一、常规列属性
1.BoundField
此类型的列是将数据表中的字段内容用文本的方式显示出来。

2.CheckBoxField(不常用)
常用来显示数据库中的布尔类型字段的值

3.HyperLinkField
显示一个链接,此类型字段常用,其主要属性是:
DataNavigateUrlFields、DataNavigateUrlFormatString、DataTextField、DataTextFormatString
如:要在此列中形成一个链接,链接的文字是“公司名称”,链接到查看公司详细信息的页面:ViewCompany.aspx,并且页面后要跟一个参数ID=xxxx。第一条记录ID=ALFKI,CompanyName=Alfreds Futterkiste,其生成的链接应该是ViewCompany.aspx?ID=ALFKI,其链接文本为“Alfreds Futterkiste”,以上四个属性定义的值如下:
DataNavigateUrlFields 的值为 "CustomerID"
DataNavigateUrlFormatString 的值为 "ViewCompany.aspx?id={0}",在生成时,{0}就会用DataNavigateUrlFields属性所定义的字段的值进行替换。
DataTextField的值为"CompanyName"
DataTextFormatString的值为"{0}",也就是只显示其公司的名称,无其它多余文字。显示效果如下图所示:

4.ImageField(不常用)
用于显示存储图片的二进制类型字段的数据,直接将二进制字段存储的图片数据显示为图片,但此字段在VS2005之后去掉了DataField属性,加入了 DataImageUrlField字段,其意思是不再支持直接显示二进制内容为图片,而是需要自己再写一个显示页面,在这个页面去读取二进制字段内容, 并将其输出为图片内容。此字段不常用。

5.ButtonField
此列显示为“按钮”,注意:按钮并不只是HTML语言中的<input type="button"...>这一种类型,在asp.net中,能够完成将表单(页面)提交(PostBack)到服务器动作的控件都可以称 之为“按钮”,因此,此类型的字段有一个属性:ButtonType有三个选项,Link、Image、Button,表示了“按钮”的三种表现形式,分 别对应着“工具箱”中的LinkButton、ImageButton、Button三种控件。
当按钮被Click之后,会触发GridView的“RowCommand”事件,按钮被点击后执行什么样的程序,要在RowCommand事件中去写。
有这样一个问题:如果一个GridView中有多个Button列,但只有一个RowCommand事件,那么如何知道当前是哪一列的Button被Click了呢?这就需要通过ButtonField列的CommandName属性来指定。
如:有两个ButtonField列,将第一列的CommandName属性设置为“这是第一列”,将第二列的CommandName属性设置为“这是第二列”。
选中GridView控件,在“属性面板”的“事件”页中双击RowCommand事件后的空格。

再在aspx.cs文件中的GridView的RowCommand事件中程序如下书写:
    protected void GridView1_RowCommand(object sender, GridViewCommandEventArgs e)
    {
        switch (e.CommandName)
        {
            case "这是第一列":
                //此处请写被点击后需要处理的事务
                Response.Write("第一列被点击");
                break;
            case "这是第二列":
                //此处请写被点击后需要处理的事务
                Response.Write("第二列被点击");
                break;
        }
    }

6.CommandField
此列的实质与ButtonField列没有任何区别,唯有的区别就是不需要再设置CommandName属性,而是每一种按钮对应了GridView的一 种事件,而不是RowCommand事件,如:编辑按钮对应着RowEditing事件,删除按钮对应着RowDeleting(删除之时)和 RowDeleted(删除之后)两个事件,以此类推,这里就不一一列举。也不再举例。

二、模板列
前面几个类型的列,把它们统称为“常规列”,模板列(Template)与之前的几个列的区别在 于:之前的列都相当于一个单个的控件,而此列相当于一个容器,在容器中又可以拖入多个控件,构成更复杂的单元格内容。GridView之所以灵活就灵活在 这个模板列。在列定义的对话框中加入一个模板列,只设置HeadText和ItemStyle.Width等属性,再点击确定关闭对话框。在aspx页面 中选中GridView控件并点击右向箭头,如下图所示:


点击“编辑模板”进入下面界面:

可以看到,右方的下拉列表中列出了模板列的名称,如果有多个模板列,则会列出多个模板列的名称,每个模板下有多个Template,我们一般只需要编辑ItemTemplate,其它的Template大家可以根据其名称推测其作用。
ItemTemplate就是“容器”,可以将“工具箱”中的控件拖入其中。上图中就拖入一个Image控件,一个Button控件和一个CheckBox控件。
选中这些控件,并在属性面板中将其ID改为有意义的名称。其具体的用法在后面再讲。
模板列编辑结束后,点击右向箭头选择“结束模板编辑”。

三、RowDataBound事件
上面只是定义了模板列,如果要其显示出每条记录的相应信息,还需要将模板列中的控件属性赋值,这个动作一般放在GridView的 RowDataBound事件中去完成。双击属性面板的动作页,定义一个RowDataBound事件。假定刚才定义的三个控件其ID分别 为:imgTemp,btnTemp,cbTemp,则aspx.cs文件示范程序如下:
    protected void GridView1_RowDataBound(object sender, GridViewRowEventArgs e)
    {
        if(e.Row.RowIndex < 0) //如果正在生成表头
            return;
        DataRowView drv = (DataRowView)e.Row.DataItem;   //将绑定当前行的数据行视图取出

        Image img = (Image)e.Row.FindControl("imgTemp");
        img.ImageUrl = drv["ImageUrl"].ToString();   //假定数据表中有一个ImageUrl的字段

        Button btn = (Button)e.Row.FindControl("btnTemp");
        btn.Text = drv["CompanyName"].ToString();

        CheckBox cb = (CheckBox)e.Row.FindControl("cbTemp");
        cb.Checked = (drv["IsSelect"].ToString() == "1" ? true : false);   //假定数据表中有一个IsSelect字段,1表示选中,0表示未选中。
    }

上面这段程序是一个示范,并不是完全按照示范表Customer表中的字段进行设置。其过程为:
1.将e.Row.DataItem强制转换为DataRowView对象,这个对象就是绑定到此行的数据表DataTable中的一条DataRow的视图,其用法与DataRow类似。
2.通过e.Row.FindControl方法找到指定ID的那个模板中的控件
3.通过一定的计算,将DataRowView中的值转换为控件的属性。

不仅模板列可以在RowDataBound事件中进行操作,常规列也可以,但不是用FindControl方法,以下例为示范,要获取第2列公司名称这个 HyperLinkField类型的常规列中的HyperLink对象,在RowDataBound事件中写下面这行程序:

HyperLink hl = (HyperLink)e.Row.Cells[1].Controls[0];

因为此列位于该表的第二列,因此Cells[1]表示该单元格,此单元格中只有一个控件,因此为Controls[0]。
再如:在删除动作列中的删除按钮上加一个JavaScript动作,每次点击删除按钮时,先在页面通过JavaScript弹出一个确认对话框,可以按如下步骤操作:
1.在列编辑对话框中添加一个“删除”按钮列,按钮类型为Button,假定是在表格的第4列
2.在RowDataBound中如此写:

Button btDel = (Button)e.Row.Cells[3].Controls[0];
bt.Attributes.Add("OnClick", "return confirm('您是否确认删除此条记录?')");

在浏览器中查看此表格的HTML源码时,就会发现每一个删除按钮都有如此一段HTML属性:
OnClick="return confirm('您是否确认删除此条记录?')"
return confirm('.....')是一句JavaScript语句,根据用户在弹出的对话框中选择的项来决定返回的值,如果选择“是”,则返回true,则此按钮所触发的提交表单继续进行;反之,返回false,则此按钮所触发的提交表单事情停止,删除动作就不会完成。

四DataKeys属性
GridView有一个DataKeys属性会经常用到,这里单独讲一下。比如:有一个删除按钮列,点击删除后,要删除当前行,但是你怎么从后台程序中获 取到当前行的关键字段的值呢?方法有多种,但最可靠的方法还是通过GridView的DataKeys属性。下面程序是示范:
1.在进行数据绑定之时,设置DataKeyNames属性的值:
        this.GridView1.DataSource = ds.Tables[0];
        this.GridView1.DataKeyNames = new string[] { "CustomerID", "CompanyName" };
        this.GridView1.DataBind();
此行程序的作用是将CustomerID和CompanyName两个字段的值放入到DataKeys数组中。

2.在GridView1_RowDeleting事件中写如下程序:
        string id = this.GridView1.DataKeys[e.RowIndex]["CustomerID"].ToString();
        string name = this.GridView1.DataKeys[e.RowIndex]["CompanyName"].ToString();
这样就获取到了当前行记录在DataKeys数组中的值。

五、事件

DataBinding   当服务器控件绑定到数据源时发生。(从 Control 继承。)
DataBound   在服务器控件绑定到数据源后发生。(从 BaseDataBoundControl 继承。)
Disposed   当从内存释放服务器控件时发生,这是请求 ASP.NET 页时服务器控件生存期的最后阶段。(从 Control 继承。)
Init   当服务器控件初始化时发生;初始化是控件生存期的第一步。(从 Control 继承。)
Load   当服务器控件加载到 Page 对象中时发生。(从 Control 继承。)
PageIndexChanged 在单击某一页导航按钮时,但在 GridView 控件处理分页操作之后发生。
PageIndexChanging 在单击某一页导航按钮时,但在 GridView 控件处理分页操作之前发生。
PreRender   在加载 Control 对象之后、呈现之前发生。(从 Control 继承。)
RowCancelingEdit 单击编辑模式中某一行的“取消”按钮以后,在该行退出编辑模式之前发生。
RowCommand 当单击 GridView 控件中的按钮时发生。
RowCreated 在 GridView 控件中创建行时发生。
RowDataBound 在 GridView 控件中将数据行绑定到数据时发生。
RowDeleted 在单击某一行的“删除”按钮时,但在 GridView 控件删除该行之后发生。
RowDeleting 在单击某一行的“删除”按钮时,但在 GridView 控件删除该行之前发生。
RowEditing 发生在单击某一行的“编辑”按钮以后,GridView 控件进入编辑模式之前。
RowUpdated 发生在单击某一行的“更新”按钮,并且 GridView 控件对该行进行更新之后。
RowUpdating 发生在单击某一行的“更新”按钮以后,GridView 控件对该行进行更新之前。
SelectedIndexChanged 发生在单击某一行的“选择”按钮,GridView 控件对相应的选择操作进行处理之后。
SelectedIndexChanging 发生在单击某一行的“选择”按钮以后,GridView 控件对相应的选择操作进行处理之前。
Sorted 在单击用于列排序的超链接时,但在 GridView 控件对相应的排序操作进行处理之后发生。
Sorting 在单击用于列排序的超链接时,但在 GridView 控件对相应的排序操作进行处理之前发生。
Unload   当服务器控件从内存中卸载时发生。(从 Control 继承。)

 

posted @ 2012-04-20 11:49 青蛙學堂 阅读(1129) | 评论 (0)编辑 收藏

c#--gridview--HyperLinkField

     <asp:GridView ID="GridView1" runat="server" AutoGenerateSelectButton="True" 
                        DataKeyNames="pr_key" onrowcommand="GridView1_RowCommand" 
                        Width="100%">
                        <Columns>
                            <asp:HyperLinkField DataTextField="pr_key" HeaderText="pr_key" 
                                NavigateUrl="~/WorkFlow/RequestOrder.aspx?id=" Target="_blank" DataNavigateUrlFields="pr_key" DataNavigateUrlFormatString="~/WorkFlow/RequestOrder.aspx?id={0}" />
                        </Columns>
                    </asp:GridView>

posted @ 2012-04-19 15:53 青蛙學堂 阅读(479) | 评论 (0)编辑 收藏

C#--释放资源--事务

 

1.       开启资源应注意尽早释放,关闭

第一种方式:

Try

{

  Conn.open();

  具体处理部分

}

Catch(sqlException ex)

{

 }

Finally

{

 Conn.close();

}

 

 

2.       使用using 语句块

Using (sqlconnection conn = new sqlconnection( connectstring) )

{

 Conn.open() ;

具体处理语句;

}

 

最好以上两种方式结合使用;

 

 

3.利用事务块处理

 

   Using (Transactionscope scope = new TransactionScope( TransactionScopeOption.Required))

        {

               具体处理语句;

            Scope.complete () ;

         }

 

 

3.       调用存储过程

Create procedure regionupdate (@regionid interger , @regiondescription nchar(50)) as

Set nocount off

Update region

   Set regiondescription = @regiondescription

Where region = @regionid

Go

 

Sqlcommand cmd = new sqlcommand(“过程名” , conn);

 

cmd.commandtype = commandtype.storedprocedure ;

cmd.parameters.addwithvalue(“@tegionid”,23);

cmd.parameters.addwithvalue(“@tegiondescription”,”something”);

,23);

nid"ters.addwithvalue(".storedprocedure ;egiondescription Option.Required))

cmd.executenonquery();

 

 

 

 

 

 

 

 

 

 

posted @ 2012-04-17 08:32 青蛙學堂 阅读(480) | 评论 (0)编辑 收藏

c#--excel

     摘要: 一、将DATASET中的内容导出到EXCEL或XML文件中 CodeCode highlighting produced by Actipro CodeHighlighter (freeware)http://www.CodeHighlighter.com/--> 1using System; 2using System.Data; 3using...  阅读全文

posted @ 2012-04-15 20:00 青蛙學堂 阅读(592) | 评论 (0)编辑 收藏

.NET dataset

.NET特征数据集
    1 -使用断开数据
    在DataSet中的数据是从数据库断开。一旦你获取到使用一个DataAdapter对象数据集查询的结果,但已不再是一个DataSet和数据库之间的连接。所做的更改DataSet的内容不会影响数据库。如果其他用户修改数据库中对应于DataSet中的数据的数据,你不会看到你的DataSet中的更改。
    断开数据结构与工作肯定有它的好处。第一次使用断开数据的主要好处是,它不需要实时连接到数据库。一旦你获取到DataSet对象查询的结果,您可以关闭连接到数据库并继续与DataSet中的数据。
    断开连接的数据,如DataSet的结构也将帮助你建立多层次的应用。如果应用程序使用的业务对象在中间层访问数据库服务器上运行,业务对象需要通过断开连接的数据结构,以客户应用程序。DataSet对象是专为在这种情况下使用。您可以通过从一个组件DataSet的内容到另一个。该组件接收的数据能与作为DataSet(如果组件是使用微软的。NET框架)或XML文档的信息。
   2 -滚动,排序,搜索和过滤
    DataSet对象可以让你随时检查DataSet中的任何行的内容。你可以循环来回通过查询的结果经常是你喜欢。这使得该场景中,你的代码需要遍历数据,如在报告程序,数据集对象的理想选择。您也可以轻松构建一个应用程序,允许通过一个查询结果的用户来回滚动。
    DataSet对象也让你改变你的视图的查询结果。你可以在DataSet中排序上的列或列数列计算数据。您可以搜索一个简单的搜索条件的数据行。您也可以应用过滤器DataSet中的数据,以便能满足只行所需条件是可见的。
   3 -使用分层数据
    DataSet对象是设计为使用分层数据。DataSet对象可以定义之间的数据存储在DataSet中的表之间的关系。
    4 -缓存变化
    与只读数据的工作很容易。在建立一个数据库应用程序的最大挑战之一是转化为对数据库的内容更改用户的输入。建设成一个多层次的应用程序,如逻辑可以提出一个更大的挑战,如果你的应用程序需要缓存的变化,并提交给你的数据库中的所有一次。
    DataSet对象可以让你变成一个缓存的数据,以便您可以提交到数据库使用DataAdapter的变化一行。 您也可以在DataSet检查,以确定如何修改行的行已更改(插入,修改或删除),以及比较两者的每个行的原始值和当前值。
    5 - XML集成
    ADO.NET的DataSet是从底层到使用XML。您可以保存和载入DataSet的内容作为XML文档和文件。该数据集还可以单独成一个XML架构文件的架构信息(表,列和约束信息)。
    在ADO.NET中,DataSet对象和XML文档是可以互换的。人们很容易从一个数据结构转变到另一边。这种双重性使开发人员可以使用的接口他们最舒服。XML程序员可以使用DataSet对象为XML文件,数据库程序员可以使用DataSet对象的XML文档。
    6 -统一功能
    谁拥有使用ADO开发工作可能知道Recordset对象具有的特点类似于DataSet的人。ADO Recordset对象的支持,如筛选,搜索,排序,更新和缓存的功能。然而,以何种方式在您打开一个记录在决定哪些功能是提供一个Recordset中的很大一部分。

posted @ 2012-04-15 19:56 青蛙學堂 阅读(1038) | 评论 (0)编辑 收藏

php-数据操作

     摘要: php实现对文本数据库的数据显示、加入、修改、删除、查询五大基本操作的方法  此文本数据库共有字段9个: private $bankid;  //银行ID private $bankname;  //银行名称 private $bankimg;  //银行图片 private $bankarea;  //覆盖区域 private $ba...  阅读全文

posted @ 2012-04-15 14:58 青蛙學堂 阅读(224) | 评论 (0)编辑 收藏

php显示数据库数据

昨天的程序是这样的: 
<?php 
$link=mysql_connect("localhost","root","之前的管理员密码"); 
if(!$link) echo "没有连接成功!"; 
else echo "连接成功!"; 
mysql_select_db("infosystem", $link); 
$q = "SELECT * FROM info"; 
mysql_query("SET NAMES GB2312"); 
$rs = mysql_query($q, $link); 
if(!$rs){die("Valid result!");} 
echo "<table>"; 
echo "<tr><td>部门名称</td><td>员工姓名</td><td>PC名称</td></tr>"; 
while($row = mysql_fetch_row($rs)) echo "<tr><td>$row[1]</td><td>$row[2]</td><td>$row[3]</td></tr>"; 
echo "</table>"; 
mysql_close($link); 
?> 
程序中红色部分就是显示MySQL中数据的关键。这里,大家可以用其它两种方式替换红色部分并达到相同效果。 

while($row = mysql_fetch_object($rs)) echo "<tr><td>$row->depart</td><td>$row->ename</td><td>$row-pcname</td></tr>"; 
while($row = mysql_fetch_array($rs)) echo "<tr><td>$row[depart]</td><td>$row[ename]</td><td>$row[pcname]</td></tr>"; 
简要地说明一下: 

用mysql_fetch_row()的方法返回的一行数据列储存在一个数组的单元中,偏移量从 0 开始。例如你要返回第二个字段的数据,就应该写成$row[1]而不是$row[2]。 

mysql_fetch_array() 和 mysql_fetch_row() 类似,返回的数据也是存储在一个数组中,有所区别的是我们应该用字段命来访问该数组而不是通过偏移量,例如$row[depart]。 

mysql_fetch_object()返回的不再是数组而是一个对象,我们应该用对对象的操作方法来读取数据,例如:$row->depart。 

大家可以根据自身需要,选择一种方式,代替程序中红色部分来读取MySQL数据。 

posted @ 2012-04-15 14:51 青蛙學堂 阅读(783) | 评论 (1)编辑 收藏

php怎么分页显示mysql数据库中的记录

问题补充: php怎么分页显示mysql数据库中的记录?多谢!
(数据表中字段为id,xingming,neirong,riqi)

<?php 
$conn=@mysql_connect("localhost","root","apmsetup") or die("服务器连接不成功!");//连接服务器
mysql_select_db("liuyan",$conn)or die("数据库选择不成功!");//选择数据库
$tsql="select * from biao order by id desc";//定义SQL语句
$result=mysql_query($tsql,$conn);//执行SQL语句并把结果存在变量result中。

echo "共有".mysql_num_rows($result)."条记录!<br>";//显示记录条数

while ($rs=mysql_fetch_array($result)){
php echo "$rs[id]";
php echo "$rs[xingming]";
php echo "$rs[neirong]";
php echo "$rs[riqi]";

};
?>

posted @ 2012-04-15 14:49 青蛙學堂 阅读(450) | 评论 (0)编辑 收藏

Lotus Notes 常见错误

打开Notes时提示“打开窗口时出错”或提示“标识符文件被锁定,请稍后再试” 


 方法(1)结束所有以N开头的进程后重启Notes。 

 方法(2)重新启动计算机后再打开Notes。 

 方法(3)也可在网上下载一个叫做KillNotes.exe的文件,双击就可以关闭所有Notes进程。 

 
详见:http://dalaoyer.com/article.php?id=376

posted @ 2012-04-12 09:14 青蛙學堂 阅读(33116) | 评论 (19)编辑 收藏

c#--索引器的使用

      索引器(Indexer)是C#引入的一个新型的类成员,它使得类中的对象可以像数组那样方便、直观的被引用。索引器非常类似于属性,但索引器可以有参数列表,且只能作用在实例对象上,而不能在类上直接作用。定义了索引器的类可以让您像访问数组一样的使用 [ ] 运算符访问类的成员。(当然高级的应用还有很多,比如说可以把数组通过索引器映射出去等等)

      本文只是简单演示一下索引器的概念和基本的使用方法:

请看代码,下面是类的定义,中间包含了一个索引器定义

类的定义
    public class Person
    {
        
//定义两个字段信息
        private string name;
        
private string password;

        
//定义一个 Name 属性来操作 name 字段
        public string Name
        {
            
set { name = value; }
            
get { return name; }
        }

        
//定义一个 Password 属性来操作 password 字段
        public string Password
        {
            
set { password = value; }
            
get { return password; }
        }

        
//定义索引器,name 字段的索引值为 0 ,password 字段的索引值为 1
        public string this[int index]
        {
            
get
            {
                
if (index == 0return name;
                
else if (index == 1return password;
                
else return null;
            }
            
set
            {
                
if (index == 0) name = value;
                
else if (index == 1) password = value;
            }
        }
    }

 

 

下面是使用索引器的方法:

索引器使用
    protected void Page_Load(object sender, EventArgs e)
    {
        
//声明并实例化这个类
        Person p = new Person();

        
//使用索引器的方式来给类的两个属性赋值
        p[0= "jarod";
        p[
1= "123456,./";

        
//使用类属性取得两个字段信息
        Label1.Text = p.Name + " / " + p.Password;
    }

 

 

      非常简单,在上面的类中我们把类的 name 字段映射的索引值为 0,而 password 字段映射的索引值为 1。有了这个映射就可以使用以下方式为类的 name 和 password 赋值了。

        p[0= "jarod";    //设置 name 字段值
        p[1= "123456,./";  //设置 password 字段值

 

赋值后,就可以使用属性方法访问到刚刚给两个字段赋的值了。

 

 

posted @ 2012-04-11 20:50 青蛙學堂 阅读(530) | 评论 (0)编辑 收藏

仅列出标题
共43页: First 9 10 11 12 13 14 15 16 17 Last 
<2024年5月>
2829301234
567891011
12131415161718
19202122232425
2627282930311
2345678

导航

统计

常用链接

留言簿(8)

随笔分类

随笔档案

收藏夹

青蛙学堂

最新评论

阅读排行榜

评论排行榜