MIS2000 Lab. -- ASP.NET学习&分享 / ASP.NET案例精编(清华大学出版社)
您好,我来自台湾。很高兴与各位分享一些成果。希望对您有帮助。出版书籍是「ASP.NET案例精编 / 清华大学出版社」。

 

 

要看这个范例的解说,请看上一篇文章 ---

ADO.NET #3 (GridView + SqlDataSource)完全手写、后置程序代码兼论 SqlDataSource与UpdateParameter/DeleteParameter的用法 (2010-10-22 10:04)

 

建议:初学者勿看!

    基础不好,看了会消化不良、拉肚子的。

    先把基本功夫练好,下面的范例才会感到有用。

    已经学会 GridView的样版(Template)、SqlDataSource之后再看下去

 

底下的范例,因为自己写程序,会了解 GridView的各种事件。

例如:GridView是如何完成编辑、分页、更新等等动作,下面程序代码其实是完全公开了这些过程。

 

C#版的范例如下:


 

    protectedvoid myDBInit()  //==== 自己写的程序 ====

    {

        //--------------------------------------------------

        //-----  手动撰写 SqlDataSource  -----

        //--------------------------------------------------

        SqlDataSourceSqlDataSource1 = new SqlDataSource();

        //==自己手动撰写 SqlDataSource  ,必须先写下面三行 ==

 

        //== 1.连结数据库的连接字符串 ConnectionString  ==

        SqlDataSource1.ConnectionString= System.Web.Configuration.WebConfigurationManager.ConnectionStrings["testConnectionString"].ConnectionString;

 

        //== 2.撰写SQL指令 ==

        SqlDataSource1.SelectCommand= "SELECT * FROM [test]";

 

        SqlDataSource1.DataSourceMode= SqlDataSourceMode.DataSet;

        //== 如果 DataSourceMode属性设为 DataSet值,则 Select方法会传回 DataView对象。

        //== 如果 DataSourceMode属性设为 DataReader值,则会传回 IDataReader物件。

        //     当完成读取数据时,请关闭 IDataReader对象。

 

        //== 3.执行SQL指令 .select()==

        DataSourceSelectArgumentsargs = new DataSourceSelectArguments();

        DataViewdv = (DataView)SqlDataSource1.Select(args);

        //== 或是写成一行 Data.DataViewdv = (DataView)SqlDataSource1.Select(new DataSourceSelectArguments());

        //== DataSourceSelectArguments提供一项机制,让数据系结控件于撷取数据时,用来向数据来源控件要求数据相关的作业。

        //==http://msdn2.microsoft.com/zh-tw/library/system.web.ui.webcontrols.sqldatasource.select(VS.80).aspx

 

        //=============================

        GridView1.DataSource= dv;

        GridView1.DataBind();

        //=============================

        SqlDataSource1.Dispose();

    }

 

 

    protectedvoid Page_Load(object sender, EventArgs e)

    {

        if (!Page.IsPostBack)

        {

            myDBInit();

            Response.Write("第一次进入画面.....if(!Page.IsPostBack).....<br>");

        }            

        else

        {

            Response.Write("第<b>N</b>次进入画面.....<br>");

        }

    }

 

 


    //==== 更新(Update) ============================================

    protectedvoid GridView1_RowUpdating(object sender, GridViewUpdateEventArgs e)

    {       

        //==批注:Cells(0)指的是: GridView第一格「更新、取消」的功能,"并非"数据库的字段!==

        //==画面的GridView设定「DataKeyNames="id"」属性之后,「数据库索引键」这一格(以下例子为Cells[1])就会变成「只读」!不可抓取使用!==

 

        Response.Write("GridView1_RowUpdating()....开始更新数据....<br>");

 

 

        TextBoxmy_test_time, my_title, my_summary, my_article;

                   //先定义 TextBox对象!

        my_test_time= (TextBox)GridView1.Rows[e.RowIndex].Cells[2].Controls[0];

        my_title= (TextBox)GridView1.Rows[e.RowIndex].Cells[4].Controls[0];

        my_summary= (TextBox)GridView1.Rows[e.RowIndex].Cells[5].Controls[0];

        my_article= (TextBox)GridView1.Rows[e.RowIndex].Cells[6].Controls[0];

 

        int my_id= Convert.ToInt32(GridView1.DataKeys[e.RowIndex].Value);   //====主索引键====

 

        SqlDataSourceSqlDataSource1 = new SqlDataSource();

        //== 连结数据库的连接字符串 ConnectionString  ==

        SqlDataSource1.ConnectionString= System.Web.Configuration.WebConfigurationManager.ConnectionStrings["testConnectionString"].ConnectionString;

 

        //SqlDataSource1.UpdateParameters.Clear();

        //== 设定SQL指令将会用到的参数 ==

        SqlDataSource1.UpdateParameters.Add("test_time",  my_test_time.Text.ToString());  

        //下面的写法也可以!

        //  SqlDataSource1.UpdateParameters.Add(new Parameter("test_time",TypeCode.DateTime));

        //  SqlDataSource1.UpdateParameters["test_time"].DefaultValue= my_test_time.Text;

 

        SqlDataSource1.UpdateParameters.Add("title",my_title.Text.ToString());

        SqlDataSource1.UpdateParameters.Add("summary",my_summary.Text.ToString());

        SqlDataSource1.UpdateParameters.Add("article",my_article.Text.ToString());

 

        SqlDataSource1.UpdateParameters.Add("id",my_id.ToString());

        //下面的写法也可以!

        //  SqlDataSource1.UpdateParameters.Add(new Parameter("id",TypeCode.Int32));

        //  SqlDataSource1.UpdateParameters["id"].DefaultValue= my_id.ToString();

 

        SqlDataSource1.UpdateCommand= "UPDATE [test] SET [test_time] = @test_time, [title] = @title, [summary]= @summary, [article] = @article WHERE [id] = @id";       

        SqlDataSource1.Update();  //执行SQL指令--Update陈述句

 

        SqlDataSource1.Dispose();

 

        //====更新完成后,离开编辑模式 ====

        GridView1.EditIndex= -1;

        myDBInit();

    }

 

 

 

    //==== 编辑 ============================================

    protectedvoid GridView1_RowEditing(object sender, GridViewEditEventArgs e)

    {

        GridView1.EditIndex= e.NewEditIndex;

        myDBInit();

        Response.Write("GridView1_RowEditing()....进入编辑模式....<br>");

    }

    protectedvoid GridView1_RowCancelingEdit(object sender, GridViewCancelEditEventArgs e)

    {

        GridView1.EditIndex= -1;

        myDBInit();

        Response.Write("GridView1_RowCancelingEdit()....离开(取消)编辑模式....<br>");

    }

 

 

    //==== 删除 ============================================

    protectedvoid GridView1_RowDeleting(object sender, GridViewDeleteEventArgs e)

    {

        SqlDataSourceSqlDataSource1 = new SqlDataSource();

        //== 连结数据库的连接字符串 ConnectionString  ==

        SqlDataSource1.ConnectionString= System.Web.Configuration.WebConfigurationManager.ConnectionStrings["testConnectionString"].ConnectionString;

 

        int my_id= Convert.ToInt32(GridView1.DataKeys[e.RowIndex].Value);    //====主索引键====

        //== 设定SQL指令将会用到的参数 ==

        SqlDataSource1.DeleteParameters.Add(newParameter("id", TypeCode.Int32));

        SqlDataSource1.DeleteParameters["id"].DefaultValue= my_id.ToString();

 

        SqlDataSource1.DeleteCommand= "Delete from [test] WHERE [id] = @id";

        SqlDataSource1.Delete();

 

        Response.Write("***删除成功! ***");

 

        //----「删除」已经完成!!记得重新整理画面,重新加载资料----

        myDBInit();

    }

 

 

 

    //==== 分页 ============================================

    protectedvoid GridView1_PageIndexChanging(object sender, GridViewPageEventArgs e)

    {

        GridView1.PageIndex= e.NewPageIndex;

        myDBInit();

        Response.Write("GridView1_PageIndexChanging()....分页ing...<br>");

    }

    protectedvoid GridView1_PageIndexChanged(object sender, EventArgs e)

    {

        Response.Write("GridView1_PageIndexChanged()....分页完成<br>");

    }

 

 =============================================================

 本范例已经收录在书本里面,敬请支持。

 

ASP.NET案例精编(清华大学出版社 / 作者MIS2000Lab)

http://www.china-pub.com/46063 

2009/5/15上市

市场价 :¥59.80 RMB(人民幣)

 

ASP.NET案例精编--适用于VS2005/2008

   

ADO.NET 共有下面文章:


posted on 2010-10-22 10:15  MIS2000 Lab.  阅读(1655)  评论(0编辑  收藏  举报


ASP.NET案例精编——适用于VS 2005/2008(配光盘)
 

当当网购买 http://product.dangdang.com/product.aspx?product_id=20583373&ref=search-1-pub