首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 网站开发 > asp.net >

GridView编程创设模版,编辑状态不能保持

2011-12-18 
GridView编程创建模版,编辑状态不能保持!前台:%@PageLanguage C# AutoEventWireup true CodeFile

GridView编程创建模版,编辑状态不能保持!
前台:
<%@   Page   Language= "C# "   AutoEventWireup= "true "   CodeFile= "Default2.aspx.cs "   Inherits= "Default2 "   %>

<!DOCTYPE   html   PUBLIC   "-//W3C//DTD   XHTML   1.0   Transitional//EN "   "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd ">

<html   xmlns= "http://www.w3.org/1999/xhtml "   >
<head   runat= "server ">
        <title> 无标题页 </title>
</head>
<body>
        <form   id= "form1 "   runat= "server ">
        <div>
                        <asp:GridView   ID= "GridView2 "     runat= "server "   OnRowEditing= "GridView2_RowEditing "   >
                        <Columns>
                                <asp:CommandField     ShowEditButton= "True "     />                          
                        </Columns>
                        <EditRowStyle   Width= "60px "   />
               
                </asp:GridView>
                <asp:Button   ID= "Button1 "   runat= "server "   Text= "Button "   /> </div>
        </form>
</body>
</html>


后台:

using   System;
using   System.Data;
using   System.Configuration;
using   System.Collections;
using   System.Web;
using   System.Web.Security;
using   System.Web.UI;
using   System.Web.UI.WebControls;
using   System.Web.UI.WebControls.WebParts;

public   partial   class   Default2   :   System.Web.UI.Page
{
        DataTable   dt   =   new   DataTable();
        protected   void   Page_Load(object   sender,   EventArgs   e)
        {
                if   (!IsPostBack)
                {
                        CreatedGridView();
                }

                if   (Session[ "sample "]   !=   null)
                {
                        GridView2.DataSource   =   ((DataTable)Session[ "sample "]).DefaultView;
                        this.GridView2.DataBind();
                }


                 
        }

        public   void   CreatedGridView()
        {


                DateTime   BeginDate   =   Convert.ToDateTime( "2007-9-1 ");
                DateTime   EndDate   =   Convert.ToDateTime( "2007-9-3 ");

                System.TimeSpan   ts   =   EndDate   -   BeginDate;

                DataColumn   emyID   =   new   DataColumn();
                emyID.ColumnName   =   "编号 ";

                DataColumn   emyName   =   new   DataColumn();
                emyName.ColumnName   =   "姓名 ";
                emyName.DataType   =   System.Type.GetType( "System.String ");

                DataColumn   dutyDate   =   new   DataColumn();
                dutyDate.ColumnName   =   "排班日期 ";
                dutyDate.DataType   =   System.Type.GetType( "System.DateTime ");

                dt.Columns.Add(emyID);
                dt.Columns.Add(emyName);
                dt.Columns.Add(dutyDate);
                for   (int   i   =   0;   i   <   ts.Days   ;   i++)
                {

                        TemplateField   field   =   new   TemplateField();
                        field.HeaderStyle.Wrap   =   false;
                        field.ItemStyle.HorizontalAlign   =   HorizontalAlign.Center;
                        field.HeaderText   =   BeginDate.AddDays(i).ToShortDateString();

                        field.ItemTemplate   =   new   GridViewTemplate(ListItemType.Item,   " ");
                        field.EditItemTemplate   =   new   GridViewTemplate(ListItemType.Item,   " ");
                        this.GridView2.Columns.Add(field);

                }

                DataRow   dr   =   dt.NewRow();
                dr[ "编号 "]   =   "1111111 ";
                dr[ "姓名 "]   =   "华民国 ";


                dr[ "排班日期 "]   =   DateTime.Now;

                dt.Rows.Add(dr);
                Session[ "sample "]   =   dt;
                this.GridView2.DataSource   =   dt;
                this.GridView2.DataBind();

        }

        public   class   GridViewTemplate   :   ITemplate
        {
                ListItemType   templateType;
                string   columnName;

                public   GridViewTemplate(ListItemType   type,   string   colname)
                {
                        templateType   =   type;
                        columnName   =   colname;
                }

                public   void   InstantiateIn(System.Web.UI.Control   container)
                {
                        switch   (templateType)
                        {
                                case   ListItemType.Header:
                                        //lc.Text   =   " <B> "   +   columnName   +   " </B> ";
                                        //container.Controls.Add(lc);
                                        break;
                                case   ListItemType.Item:
                                        DropDownList   drr   =   new   DropDownList();
                                        drr.ID   =   "dropdown ";
                                        drr.AppendDataBoundItems   =   true;
                                        drr.Items.Add(new   ListItem( "-----请选择------ ",   " "));
                                        drr.Items.Add(new   ListItem( "AA ",   "a "));


                                        drr.Items.Add(new   ListItem( "BB ",   "b "));
                                        drr.Items.Add(new   ListItem( "CC ",   "c "));
                                        container.Controls.Add(drr);
                                        break;
                                case   ListItemType.EditItem:
                                        //TextBox   tb   =   new   TextBox();
                                        //tb.Text   =   " ";
                                        //container.Controls.Add(tb);
                                        break;
                                case   ListItemType.Footer:
                                        //lc.Text   =   " <I> "   +   columnName   +   " </I> ";
                                        //container.Controls.Add(lc);
                                        break;
                        }


                }
        }

        protected   void   GridView2_RowEditing(object   sender,   GridViewEditEventArgs   e)
        {

                this.GridView2.EditIndex   =   e.NewEditIndex;
                this.GridView2.DataBind();  
        }

}


//以前代码可以放入vs2005运行
//动态创建的DropDownList在编辑时没有了,请问怎么保持?


[解决办法]
先帮你顶一下!
[解决办法]
this.GridView2.EditIndex = e.NewEditIndex;
this.GridView2.DataBind();
这样设置了应该没有问题了啊?
[解决办法]
非要动态创建么 在模板列里加行不/

加上后 再RowDataBound事件里 根据 列ID 去查出 数据 再加入到 DDL 中 好吧
------解决方案--------------------


经过分析知道,你的dropdownlist是程序创建的,所以在Edit的时候,程序没有创建,所以没有dropdownlist
解决办法,
Try
protected void GridView2_RowEditing(object sender, GridViewEditEventArgs e)
{
CreatedGridView();
this.GridView2.EditIndex = e.NewEditIndex;
this.GridView2.DataBind();
}

[解决办法]
不过,没有细测,问题应该出在这,楼主可以自己尝试下
[解决办法]
1.
// 不要放在 IsPostBack 里面,
//if (!IsPostBack)
//{
CreatedGridView(); // 动态创建空件,你得保证每次请求页面都能够执行,否则空件就没了
//}

2.
没看懂你的代码逻辑,

一般 Page_Load 里面的绑定代码,应该放在 !IsPostBack 里面, 否则回发时数据被重新绑定,覆盖了输入的值, Update 的时候得不到新值

if (!IsPostBack) { // !!!!
if (Session[ "sample "] != null)
{
GridView2.DataSource = ((DataTable)Session[ "sample "]).DefaultView;
this.GridView2.DataBind();
}
}
[解决办法]
void Page_Init(object sender, EventArgs e) // 最好在 Init 阶段或者更早,创建空件,否则 ViewState 可能无法正常的恢复
{
CreatedGridView();
}

热点排行