gridview动态生成模版列后,实现编辑更新的问题

f360930109 2008-07-13 09:30:44
我需要实现的结果是
根据设置,运行时在gridview中生成不同的模版列,绑定数据并在gridview中实现编辑删除。

在网上找了一些资料后。实现了部分效果
1、根据设置生成模版列并绑定数据实现了
方法:动态生成TemplateField并插入到gridview。代码如下:
(当处理GridView1_RowEditing的时候发现,如果我在load时加上了if (!IsPostBack)则点编辑后会在gridview增加
与现有列数目相同的空列,去掉if (!IsPostBack)后发现还是增加,于是加上GridView1.Columns.Clear();后暂时可以实现
点击编辑后显示textbox并绑定数据了。与此同时遇到另一个问题,修改数据后,点更新的时候,无法查询到修改后的数据
还有一个问题:为什么我在load的时候Label l = (Label)GridView1.Rows[3].FindControl("label计算机");就能找到值而在GridView1_RowEditing如果加上if (!IsPostBack)则label l的值就时null呢?)
2、如何实现编辑更新?是不是我的方法错了?各位大大给点建议。谢谢

我问的有不清楚的地方请各位大大提出来呀。谢谢各位啦

protected void Page_Load(object sender, EventArgs e)
{
//if (!IsPostBack)
//{
GridView1.Columns.Clear();
tf4 = new TemplateField();
tf4.ItemTemplate = new GridViewTemplate("Label", "计算机");
tf4.EditItemTemplate = new GridViewTemplate("TextBox", "计算机");
tf4.HeaderText = "计算机";
GridView1.Columns.Add(tf4);
tf4 = new TemplateField();
tf4.ItemTemplate = new GridViewTemplate("Label", "数学");
tf4.EditItemTemplate = new GridViewTemplate("TextBox", "数学");
tf4.HeaderText = "数学";
GridView1.Columns.Add(tf4);

cf = new CommandField();
cf.ShowDeleteButton = false;
cf.ShowCancelButton = false;
cf.ShowEditButton = true;
GridView1.Columns.Add(cf);
databind();
Label l = (Label)GridView1.Rows[3].FindControl("label计算机");
if (l != null) TextBox1.Text = "GridView1.Rows[3] label.text = " + l.Text;
Label l2 = (Label)GridView1.Rows[3].FindControl("labeltext");
if (l2 != null) TextBox2.Text = "GridView1.Rows[3] l2.text" + l2.Text;
//}
}



public class GridViewTemplate : ITemplate
{
private string temptype;
private string columnName;
public GridViewTemplate(string type, string colname)
{
temptype = type;
columnName = colname;
}
public void InstantiateIn(System.Web.UI.Control container)
{
switch (temptype.ToLower())
{
case "textbox":
TextBox textbox = new TextBox();
textbox.ID = "textbox" +columnName;
textbox.Text = "test";
//container.Controls.Add(textbox);
textbox.DataBinding += new EventHandler(this.OnDataBinding);
textbox.TextChanged += new EventHandler(this.OnTextChanged);
container.Controls.Add(textbox);
break;
case "label":
Label label = new Label();
label.ID = "label" +columnName;
//container.Controls.Add(label);
label.DataBinding += new EventHandler(this.OnDataBinding);
container.Controls.Add(label);
break;
default:
break;
}
}
private void OnTextChanged(object sender, EventArgs e)
{
((TextBox)sender).Text += ":";
}
public void OnDataBinding(object sender, EventArgs e)
{
GridViewRow container;
switch(temptype.ToLower())
{
case "label":
Label l1 = (Label)sender;
container = (GridViewRow)l1.NamingContainer;
//l1.Text = ((DataRowView)container.DataItem)[columnName].ToString();
l1.Text = DataBinder.Eval(container.DataItem, columnName).ToString();
break;
case "textbox":
TextBox l = (TextBox)sender;
container = (GridViewRow)l.NamingContainer;
//l.Text = ((DataRowView)container.DataItem)[columnName].ToString();
l.Text = DataBinder.Eval(container.DataItem, columnName).ToString();
break;
default:
break;
}
}
}


protected void GridView1_RowEditing(object sender, GridViewEditEventArgs e)
{
Label l = (Label)GridView1.Rows[e.NewEditIndex].FindControl("label");
TextBox lt = (TextBox)GridView1.Rows[e.NewEditIndex].FindControl("textbox计算机");
if (l == null) TextBox1.Text = "l == null is true;";
if (l != null) TextBox1.Text = "l = " + l.Text;
Label l3 = (Label)GridView1.Rows[e.NewEditIndex].FindControl("label数学");
if (l3 != null) TextBox1.Text += "l3 = " + l3.Text;
GridView1.EditIndex = e.NewEditIndex;
databind();
}



ICollection CreateDataSource()
{
System.Data.DataTable dt = new System.Data.DataTable();
System.Data.DataRow dr;
dt.Columns.Add(new System.Data.DataColumn("学生班级", typeof(System.String)));
dt.Columns.Add(new System.Data.DataColumn("学生姓名", typeof(System.String)));
dt.Columns.Add(new System.Data.DataColumn("语文", typeof(System.Decimal)));
dt.Columns.Add(new System.Data.DataColumn("数学", typeof(System.Decimal)));
dt.Columns.Add(new System.Data.DataColumn("英语", typeof(System.Decimal)));
dt.Columns.Add(new System.Data.DataColumn("计算机", typeof(System.Decimal)));

for (int i = 0; i < 8; i++)
{
System.Random rd = new System.Random(Environment.TickCount * i); ;
dr = dt.NewRow();
dr[0] = "班级" + i.ToString();
dr[1] = "学生" + i.ToString();
dr[2] = System.Math.Round(rd.NextDouble() * 100, 2);
dr[3] = System.Math.Round(rd.NextDouble() * 100, 2);
dr[4] = System.Math.Round(rd.NextDouble() * 100, 2);
dr[5] = System.Math.Round(rd.NextDouble() * 100, 2);
dt.Rows.Add(dr);
}
System.Data.DataView dv = new System.Data.DataView(dt);
return dv;
}
...全文
533 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
JeffChung 2008-07-15
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 amandag 的回复:]
一般而言动态地创建的创建的模版列状态很难维持,很少在实际应用中使用
[/Quote]
zsj830120 2008-07-15
  • 打赏
  • 举报
回复
学习了。。
东北大亨 2008-07-15
  • 打赏
  • 举报
回复

前台做一个LinkButton 在后台中
创建的模版列放在 DataTable
DataTable1.Rows.RemoveAt(e.RowIndex);
GridView1.DataSource = DataTable1;
GridView1.DataBind();

测试通过的,运行中。
mengxj85 2008-07-13
  • 打赏
  • 举报
回复
绑定方法
protected void gvPurview_RowCreated(object sender, GridViewRowEventArgs e)
{
if (e.Row.RowType == DataControlRowType.Header)
{
GridViewRow rowHeader = new GridViewRow(0, 0, DataControlRowType.Header, DataControlRowState.Normal);
rowHeader.BackColor = System.Drawing.Color.Blue;
rowHeader.Font.Bold = true;
TableCellCollection cells = e.Row.Cells;
//先添加两个空表头
TableCell headerCell = new TableCell();
headerCell.Wrap = false;
headerCell.Text = "";
rowHeader.Cells.Add(headerCell);
headerCell = new TableCell();
headerCell.Wrap = false;
headerCell.Text = "";
rowHeader.Cells.Add(headerCell);
headerCell = new TableCell();
headerCell.Wrap = false;
headerCell.Text = "";
rowHeader.Cells.Add(headerCell);

//添加科室的表头

//获得表头信息
DataTable tbDeptName = EditProc.GetAllPurviewMatrixColName();
if (tbDeptName == null)
return;
for (int i = 0; i < tbDeptName.Rows.Count; i++)
{
headerCell = new TableCell();
headerCell.Text = tbDeptName.Rows[i]["deptName"].ToString();
headerCell.HorizontalAlign = HorizontalAlign.Center;


headerCell.ColumnSpan = 5;
rowHeader.Cells.Add(headerCell);
}


//可见
rowHeader.Visible = true;
gvPurview.Controls[0].Controls.AddAt(0, rowHeader);
}
}
mengxj85 2008-07-13
  • 打赏
  • 举报
回复
编辑功能用Gridview中自带的编辑列,感觉你的代码有些多,现在没功夫看看,给我参考一下我们的做法吧。
protected void gvPurview_RowEditing(object sender, GridViewEditEventArgs e)
{
gvPurview.EditIndex = e.NewEditIndex;
//重新绑定
DataTable tbPurview = PurviewProc.GetAllPurviewInfo();
gvPurview.DataSource = tbPurview;
gvPurview.DataBind();
}
protected void gvPurview_RowUpdating(object sender, GridViewUpdateEventArgs e)
{
DataTable tbPurview = PurviewProc.GetAllPurviewInfo();

string sql="update PurviewMatrix ";
string purviewId = gvPurview.DataKeys[e.RowIndex].Value.ToString();

sql = sql + " set " + tbPurview.Columns[2].ToString() + "=" + ChangeBit(((TextBox)gvPurview.Rows[e.RowIndex].Cells[3].Controls[0]).Text).ToString();

for (int i = 4; i < gvPurview.Columns.Count; i++)
{
sql = sql + ", " + tbPurview.Columns[i-1].ToString() + "=" + ChangeBit(((TextBox)gvPurview.Rows[e.RowIndex].Cells[i].Controls[0]).Text).ToString();
}
sql = sql + " where purviewId = " + purviewId;


SqlCommand comm = DataAccess.CreateCommand();
comm.CommandType = CommandType.Text;
comm.CommandText = sql;
string flag = DataAccess.ExecuteNonQueryCommand(comm);
if (flag!="true")
Response.Write("<script language = 'javascript'> alert('输入有误!')");

//恢复状态
gvPurview.EditIndex = -1;
//绑定数据库
DataTable tbNew = PurviewProc.GetAllPurviewInfo();
gvPurview.DataSource = tbNew;
gvPurview.DataBind();

}
amandag 2008-07-13
  • 打赏
  • 举报
回复
一般而言动态地创建的创建的模版列状态很难维持,很少在实际应用中使用
walkghost 2008-07-13
  • 打赏
  • 举报
回复
路过,帮顶。
f360930109 2008-07-13
  • 打赏
  • 举报
回复
急用。谢谢各位
f360930109 2008-07-13
  • 打赏
  • 举报
回复
谢谢各位。
f360930109 2008-07-13
  • 打赏
  • 举报
回复
谢谢大家
谢谢mengxj85
谢谢amandag
我看一下。
大家有什么建议继续提呀
第7章 数据绑定控件 300 7.1 数据绑定技术 301 实例188 格式化订货金额和订单日期并 进行绑定 301 实例189 使用绑定表达式高亮显示搜索关键字 302 实例190 Eval()绑定图书图片并实现单击图片 进行链接 304 实例191 Eval()方法绑定日志并用“…”代替 超长内容 305 实例192 双向绑定Bind()方法实现更新最新 电影信息 306 实例193 绑定DataTable对象显示银行月利息 及本息 307 7.2 GridView控件基本应用 308 实例194 GridView数据绑定并实现自带 分页功能 308 实例195 实现选中、编辑和删除GridView中的 商品信息 310 实例196 供求信息网审核发布信息 (审核权限设置) 312 实例197 获取GridView控件中隐藏的列值 314 实例198 在GridView控件中实现商品信息 自动编号 315 实例199 GridView绑定数据为空时的界面设计 316 实例200 GridView强制换行显示论坛帖子的 详细信息 317 实例201 查看GridView当前行绑定的商品 详细信息 319 实例202 GridView复选框绑定列设置商品 是否上架 320 实例203 使用主题来设置GridView控件的外观 322 7.3 GridView控件72般绝技 323 实例204 实现搜索GridView多个关键字高亮 显示 323 实例205 高亮显示数据行并实现双击数据行 弹出新窗口 325 实例206 学生成绩不及格设置单元格突出显示 为红色 326 实例207 根据多个字段内容设置不同数据行的 背景色 327 实例208 自定义分页并结合下拉列表实现页次 切换 328 实例209 结合分页模板PagerTemplate实现 自定义分页 330 实例210 在GridView控件中动态添加模板列 331 实例211 带上下箭头排序并实现查询数据为 空显示表头 334 实例212 GridView自动求和及合并多列多行 单元格 336 实例213 GridView合并行或列单元格的5种 通用方式 338 实例214 GridView删除数据时弹出确认对话框 (含内容提示) 340 实例215 GridView数据源为空时显示表头和 提示信息 341 实例216 创建表头固定、表体可滚动的 GridView控件 342 实例217 可拖动列、可排序、可改变宽度的 GridView控件 344 实例218 使用“…”优化GridView控件中的 超长字符显示 345 实例219 一次性编辑GridView控件的所有行 中的数据 347 实例220 嵌套DropDownList控件根据库存量 设置商品停售 348 实例221 嵌套CheckBox实现批量删除和更新 供求信息 349 实例222 结合CheckBox实现密码重置 (MD5加密) 351 实例223 结合哈希表设置在线考试后台管理 权限 353 实例224 嵌套GridView控件实现商品信息 明细表 354 实例225 将GridView控件的数据导出到Excel 并进行格式化 355 实例226 将Excel中数据导入到Aceess 并绑定GridView 356 实例227 将GridView中绑定的Access数据 生成XML 358 实例228 嵌套购物车(可增减商品数并显示 摘要信息) 359 实例229 使用LINQ实现GridView控件分页 功能 361 实例230 LINQ绑定GridView实现编辑和删除 数据 362 实例231 开发针对GridView自定义分页的用户 控件 364 7.4 灵活访问数据俊杰:DataList控件 365 实例232 分页绑定DataList数据并实现页面 跳转功能 365 实例233 开发针对DataList控件分页功能的 用户控件 368 实例234 使用DataList删除数据(支持批量 删除) 370 实例235 利用DataList控件智能化查看详细 信息 371 实例236 编辑绑定在DataList控件中的商品 信息 373 实例237 利用嵌套DataList控件显示商品明细 信息 374 实例238 查找嵌套在DataList控件中的多个 服务器控件 376 7.5 王牌现身:全新的ListView控件 377 实例239 以独立DataPager控件设置ListView 的分页 377 实例240 异步无刷新水平滚动照片 (AJAX+ListView) 379 实例241 编辑绑定在ListView中的照片 (ADO.NET版) 380 实例242 编辑绑定在ListView中的照片 (LINQ版) 382 实例243 高亮显示ListView中的数据行并实现 图片自动变换 384
第1章 新闻网站基础工作 1 1.1 建立网站文件夹 1 1.1.1 启动VS2008 1 1.1.2 新建网站 1 1.1.3 定义网站所在的文件夹 1 1.1.4 网站开发界面 2 1.1.5 现有网站的的打开 3 1.2 网站数据库建立 4 1.2.1 加入数据库文件 4 1.2.2 配置网站安全 4 1.2.3 使用安全向导简化操作过程 5 1.2.4 定义安全验证 6 1.2.5 启用角色 6 1.2.6 创建角色 7 1.2.7 创建用户 7 1.3 网站数据表的建立 8 1.3.1查看数据库表 8 1.3.2 建立用户数据表 8 1.3.3 建表SQL代码 8 1.3.4 运行SQL代码建表 9 1.4 查看建好的用户表 9 小结 10 第2章 母版页和CSS文件 10 2.1 母版页 11 2.1.1 母版页文件及所在文件夹 11 2.1.2 母版页的设计布局 12 2.1.3 母版页的HTML主要代码 13 2.2 CSS样式文件 14 2.2.1 建立CSS样式文件 14 2.2.2 CSS文件的代码结构 15 2.3 CSS文件的应用 17 2.3.1 引用CSS文件 17 2.3.2 查看CSS样式作用结果 18 2.4 网页上加载图片或flash 18 2.4.1 准备图片及flash文件 19 2.4.2 加载图片 19 2.4.2加载flash文件 21 小结 21 第3章 栏目页操作 21 3.1 建立栏目文件夹及栏目管理页 21 3.1.1 建立栏目及新闻文件夹 21 3.1.2 新建栏目管理页 22 3.2 栏目页设计制作准备 23 3.3 栏目页中GridView对象操作 24 3.3.1 加入GridView1对象 24 3.3.2 GriaView1的任务 24 3.3.3 配置GriaView1对象的数据源 25 3.3.4 GriaView1对象数据源中表配置 26 3.3.5 数据源中生成SQL代码 27 3.4 GriaView对象的列操作 27 3.4.1 编辑GriaView1对象中列 27 3.4.2 调整GriaView1中用于显示的列 28 3.4.3 GriaView对象的属性设置 29 3.5 栏目页中FormView对象 29 3.5.1 加入FormView1对象 30 3.5.2 为FormView1对象配置数据源 30 3.5.3 删除FormView1多余的模板 30 3.6 FormView1中的模板布局 31 3.6.1 对InsertItemTemplate模板用Table美化布局 31 3.6.2 FormView1对象初始显示模式设定 33 3.6.3 网页运行效果查看 34 3.7 lmio.aspx页的运行操作 34 3.7.1自动套用格式—最快的美化 34 3.7.2 网页操作提示----必须学会 35 3.7.3 更新操作时的错误纠正 39 3.7.4 排序输入中的数字限制 39 小结 40 4 新闻页操作 40 4.1 新闻操作页的类型 40 4.1.1 新建新闻操作各页 40 4.2 新闻新增页 41 4.2.1 设计新闻新增页 41 4.2.2 使用FormView对象 41 4.2.3 FormView对象数据源选择表 41 4.2.4 设置FormView对象模板 42 4.2.5 InsertItemTemplate模板Table布局 42 4.2.6 内置DropDownlist对象 43 4.2.7 新闻内容输入框设计 46 4.2.8 页面间的链接—从本页转到新闻列表页 47 4.2.9 运行新闻新增页 47 4.2.10 修改新闻页标题 47 4.2.11 使用在线编辑器 47 4.2.12 使用存储过程进行优化处理新增页 51 4.3 新闻列表页 55 4.3.1 创建用于新闻列表页的存储过程 55 4.3.2 新闻列表页设计 55 4.3.3 定义栏目标签,新闻列表标签的样式 57 4.3.4 定义newslist.aspx页的下拉框对象 58 4.3.5 定义newslist.aspx页的GridView对象 60 4.3.6 设计newlist.aspx页的GridView1对象 61 4.3.7 编辑GridView1对象模板列Column[0] 栏目列 63 4.3.8 编辑GridView1对象模板列Column[4] 编辑列 65 4.3.9 编辑GridView1对象模板列Column[5] 删除列 67 4.4 新闻编辑页 69 4.4.1 新闻编辑页设计newsedit.aspx 69 4.4.2 FormView对象设置 71 4.4.3使用存储过程进行优化处理编辑页 72 4.4.4使用在线编辑器 73 小结 73 5 主页----标题列表与链接,新闻显示页 73 5.1新闻显示页类型 73 5.1.1新建新闻显示各页 74 5.2 主页----新闻标题列表页 74 5.2.1 设计主页—外层Dataist—栏目 74 5.2.2设计主页—内层Dataist—新闻标题 77 5.2.3 为栏目名和新闻标题挂上链接 82 5.2.4 为标题加上一个图标指示 85 5.3 设计新闻内容页 Disp.aspx 85 5.3.1 使用formview对象显示新闻 85 5.3.2 设置FormView1对象模板 86 5.4设计新闻同栏目标题页newsLmBt.aspx 87 5.4.1 设计newsLmBt.aspx 87 5.4.2 编辑DataList1的模板 88 5.4.3 挂接链接 89 小结 90 6 新闻分隔页 90 6.1 静态的分隔页 90 6.1.1 静态新闻分隔页的效果图 90 6.1.2 静态新闻分隔页CSS代码 91 6.1.3 静态新闻分隔页HTML完整代码 92 6.1.3 静态新闻分隔页HTML功能代码块分析 94 6.1.4 从外部引用Javascript代码 96 6.2 动态新闻分隔页HTML功能代码块生成 98 6.2.1 分隔页控件的制作 98 6.2.2 分隔页控件加入index.aspx页中 102 小结 103 7 图片文件上传与链接 103 7.1 图片文件上传操作的前期工作 103 7.1.1新建上传文件数据库表 103 7.1.2建立上传文件的文件夹,存放文件夹 105 7.1.3文件上传操作页功能 105 7.2 图片上传页jpgUp.aspx制作 105 7.2.1 jpgUp.aspx功能设计要求 105 7.2.2 jpgUp.aspx的信息输入界面 105 7.2.3 jpgUp.aspx的图片信息显示界面 108 7.2.4 jpgUp.aspx的图片信息显示界面2 110 7.2.5 jpgUp.aspx页的用户操作代码 113 7.2.6 jpgUp.aspx页的完整代码 118 7.3 各类图片的显示(由用户控件完成) 122 7.3.1 静态流动图片的显示 122 7.3.2 动态显示流动图片的用户控件 124 7.3.3 静态翻页图片的显示 125 7.3.4 动态显示翻页图片的用户控件 126 7.3.5 静态图片显示的用户控件 127 7.4用户控件的使用 129 7.4.1重新设计母版页1 129 7.4.2重新设计母版页2 129 小结 130 8图片链接页jpglink.aspx的制作 130 8.1 图片链接页的母版页制作 130 8.1.1母版页linkMaster.master的专用CSS文件 131 8.1.2 建立母版页linkMaster.master 131 8.2 图片链接页jpglink.aspx制作 131 8.2.1页内标题制作 132 8.2.2 局部使用Table定位 132 8.3 数据大类显示与操作 132 8.3.1 数据大类列表对象 132 8.4 数据项显示与操作 135 8.4.1 图片数据项制作 135 8.4.2 新闻标题数据项制作 138 8.4.3 挂链接代码 141 小结 141 9 视频的使用 141 9.1 视频的前期准备工作 141 9.1.1 建立视频数据表 141 9.1.2建立操作视频数据表的存贮过程 142 9.1.3 新建视频文件夹 143 9.1.4视频操作各页的功能 143 9.2 视频文件的FTP上传页 144 9.2.1 新建视频FTP页(文件名filmftp.aspx) 144 9.2.2 制作视频FTP页界面1 144 9.2.3 制作视频FTP页界面2 146 9.2.4 视频播放的代码 147 9.2.5 制作视频FTP页界面3 148 9.2.6 filmftp.aspx页的操作 151 9.3视频上传及说明编辑页 151 9.3.1 新建视频上传及说明编辑页(文件名filmUp.aspx) 151 9.3.2 制作视频上传及说明编辑页 151 9.3.2修改调整复制部分对象及代码 153 6 网站安全设置 154 6.1 启动Asp.net配置(网站安全) 154 6.1.1 启动Asp.net网站管理工具 154 6.1.2 为用户挂上角色 158 6.1.3 加入登录页login.aspx 158 6.1.4 在login.aspx页中加入登录控件 159 7 菜单 160 7.1菜单 160 小结 162 12网站的发布与安装 162

61,825

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术交流专区
javascript云原生 企业社区
社区管理员
  • ASP.NET
  • .Net开发者社区
  • R小R
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

.NET 社区是一个围绕开源 .NET 的开放、热情、创新、包容的技术社区。社区致力于为广大 .NET 爱好者提供一个良好的知识共享、协同互助的 .NET 技术交流环境。我们尊重不同意见,支持健康理性的辩论和互动,反对歧视和攻击。

希望和大家一起共同营造一个活跃、友好的社区氛围。

试试用AI创作助手写篇文章吧