不多说 贴代码先ASPX 代码如下
<%@ Page Language="C#" AutoEventWireup="true" CodeFile="temp.aspx.cs" Inherits="WebForm_temp" EnableViewState ="true" %><!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 id="Head1" runat="server">
<link href="../BaseCSS.css" rel="stylesheet" type="text/css" />
<title>无标题页</title>
</head>
<body>
<form id="form1" runat="server"> <asp:Label ID="Label1" runat="server" Text="Label"></asp:Label>
<div> <asp:GridView ID="GridView1" runat="server" AutoGenerateColumns="False"
BackColor="White" BorderColor="#999999" BorderStyle="None" BorderWidth="1px"
CellPadding="3" GridLines="Vertical"
onrowdatabound="GridView1_RowDataBound" onrowcreated="GridView1_RowCreated"> </asp:GridView>
</div>
<asp:Button ID="Button1" runat="server" onclick="Button1_Click" Text="Button" />
</form>
</body>
</html>CS 代码如下
using System;
using System.Collections;
using System.Configuration;
using System.Data;
using System.Linq;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.HtmlControls;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Xml.Linq;
using AjaxControlToolkit;public partial class WebForm_temp : System.Web.UI.Page
{
ClassCommon MyClassCommon = new ClassCommon(); DataTable MyDataTable = new DataTable(); protected void Page_Load(object sender, EventArgs e)
{
if (!IsPostBack)
{
GvDataBind();
}
}
protected void GvDataBind()
{
//读取数据到mydatatable 这个表含3列 -> ID,AA,BB 测试用 MyClassCommon.SqlFillDataTable("select * from poohr.dbo.表", MyClassCommon.Str_db_sql_connection, MyDataTable); this.GridView1.Columns.Clear();
for (int i = 0; i < MyDataTable.Columns.Count; i++)
{
TemplateField customField = new TemplateField();
customField.ShowHeader = true;
//customField.HeaderTemplate = new GridViewTemplate(DataControlRowType.Header, MyDataTable.Columns[i].Caption.ToString()); customField.HeaderText = MyDataTable.Columns[i].Caption.ToString();
if (customField.HeaderText.ToString().ToLower() != "id")
{
customField.ItemTemplate = new GridViewTemplate(DataControlRowType.DataRow, MyDataTable.Columns[i].Caption.ToString(), i);
GridView1.Columns.Add(customField);
}
else
{
BoundField bf1 = new BoundField();
bf1.DataField = "id";
bf1.HeaderText = "id";
GridView1.Columns.Add(bf1);
}
}
this.GridView1.DataSource = MyDataTable;
this.GridView1.DataBind();
} //以下是根据孟子E章更改的数据(设定动态列的东西,由于存在2列Dropdown所以加了一个 参数) public class GridViewTemplate : ITemplate
{
private DataControlRowType templateType;
private string columnName;
private int iCols; public GridViewTemplate(DataControlRowType type, string colname, int iCol)
{
templateType = type;
columnName = colname;
iCols = iCol;
} public void InstantiateIn(System.Web.UI.Control container)
{
switch (templateType)
{
case DataControlRowType.Header:
Literal lc = new Literal();
lc.Text = columnName;
container.Controls.Add(lc);
break;
case DataControlRowType.DataRow: DropDownList drr = new DropDownList(); drr.ID = "dropdown" + iCols.ToString();
drr.AppendDataBoundItems = true;
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;
default:
break;
}
}
}
protected void GridView1_RowDataBound(object sender, GridViewRowEventArgs e)
{
if (e.Row.RowType == DataControlRowType.DataRow)
{
System.Data.DataRowView drv = (System.Data.DataRowView)e.Row.DataItem;
for (int i = 0; i < e.Row.Cells.Count; i++)
{
DropDownList ddl = (DropDownList)e.Row.FindControl("dropdown" + i.ToString());
if (ddl != null)
{
try
{
//这边初始化成功!!!
ddl.Items.FindByText(drv[i].ToString()).Selected = true;
}
catch
{ }
}
} }
} protected void Button1_Click(object sender, EventArgs e)
{
string SqlUpdateStr = "";
foreach (GridViewRow gvr in GridView1.Rows)
{
for (int i = 0; i < gvr.Cells.Count; i++)
{
DropDownList dd = (DropDownList)gvr.FindControl("dropdown" + i.ToString()); //关键是在于这边找不到该控件!!
if (dd != null)
{
SqlUpdateStr += dd.SelectedItem.Text.ToString(); //找到该控件
}
else
{
SqlUpdateStr += gvr.Cells[i].Text.ToString();
}
}
SqlUpdateStr +="";
}
this.Label1.Text = SqlUpdateStr ;
//Response.Redirect(Request.UrlReferrer.ToString());
GvDataBind(); }
}
<%@ Page Language="C#" AutoEventWireup="true" CodeFile="temp.aspx.cs" Inherits="WebForm_temp" EnableViewState ="true" %><!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 id="Head1" runat="server">
<link href="../BaseCSS.css" rel="stylesheet" type="text/css" />
<title>无标题页</title>
</head>
<body>
<form id="form1" runat="server"> <asp:Label ID="Label1" runat="server" Text="Label"></asp:Label>
<div> <asp:GridView ID="GridView1" runat="server" AutoGenerateColumns="False"
BackColor="White" BorderColor="#999999" BorderStyle="None" BorderWidth="1px"
CellPadding="3" GridLines="Vertical"
onrowdatabound="GridView1_RowDataBound" onrowcreated="GridView1_RowCreated"> </asp:GridView>
</div>
<asp:Button ID="Button1" runat="server" onclick="Button1_Click" Text="Button" />
</form>
</body>
</html>CS 代码如下
using System;
using System.Collections;
using System.Configuration;
using System.Data;
using System.Linq;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.HtmlControls;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Xml.Linq;
using AjaxControlToolkit;public partial class WebForm_temp : System.Web.UI.Page
{
ClassCommon MyClassCommon = new ClassCommon(); DataTable MyDataTable = new DataTable(); protected void Page_Load(object sender, EventArgs e)
{
if (!IsPostBack)
{
GvDataBind();
}
}
protected void GvDataBind()
{
//读取数据到mydatatable 这个表含3列 -> ID,AA,BB 测试用 MyClassCommon.SqlFillDataTable("select * from poohr.dbo.表", MyClassCommon.Str_db_sql_connection, MyDataTable); this.GridView1.Columns.Clear();
for (int i = 0; i < MyDataTable.Columns.Count; i++)
{
TemplateField customField = new TemplateField();
customField.ShowHeader = true;
//customField.HeaderTemplate = new GridViewTemplate(DataControlRowType.Header, MyDataTable.Columns[i].Caption.ToString()); customField.HeaderText = MyDataTable.Columns[i].Caption.ToString();
if (customField.HeaderText.ToString().ToLower() != "id")
{
customField.ItemTemplate = new GridViewTemplate(DataControlRowType.DataRow, MyDataTable.Columns[i].Caption.ToString(), i);
GridView1.Columns.Add(customField);
}
else
{
BoundField bf1 = new BoundField();
bf1.DataField = "id";
bf1.HeaderText = "id";
GridView1.Columns.Add(bf1);
}
}
this.GridView1.DataSource = MyDataTable;
this.GridView1.DataBind();
} //以下是根据孟子E章更改的数据(设定动态列的东西,由于存在2列Dropdown所以加了一个 参数) public class GridViewTemplate : ITemplate
{
private DataControlRowType templateType;
private string columnName;
private int iCols; public GridViewTemplate(DataControlRowType type, string colname, int iCol)
{
templateType = type;
columnName = colname;
iCols = iCol;
} public void InstantiateIn(System.Web.UI.Control container)
{
switch (templateType)
{
case DataControlRowType.Header:
Literal lc = new Literal();
lc.Text = columnName;
container.Controls.Add(lc);
break;
case DataControlRowType.DataRow: DropDownList drr = new DropDownList(); drr.ID = "dropdown" + iCols.ToString();
drr.AppendDataBoundItems = true;
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;
default:
break;
}
}
}
protected void GridView1_RowDataBound(object sender, GridViewRowEventArgs e)
{
if (e.Row.RowType == DataControlRowType.DataRow)
{
System.Data.DataRowView drv = (System.Data.DataRowView)e.Row.DataItem;
for (int i = 0; i < e.Row.Cells.Count; i++)
{
DropDownList ddl = (DropDownList)e.Row.FindControl("dropdown" + i.ToString());
if (ddl != null)
{
try
{
//这边初始化成功!!!
ddl.Items.FindByText(drv[i].ToString()).Selected = true;
}
catch
{ }
}
} }
} protected void Button1_Click(object sender, EventArgs e)
{
string SqlUpdateStr = "";
foreach (GridViewRow gvr in GridView1.Rows)
{
for (int i = 0; i < gvr.Cells.Count; i++)
{
DropDownList dd = (DropDownList)gvr.FindControl("dropdown" + i.ToString()); //关键是在于这边找不到该控件!!
if (dd != null)
{
SqlUpdateStr += dd.SelectedItem.Text.ToString(); //找到该控件
}
else
{
SqlUpdateStr += gvr.Cells[i].Text.ToString();
}
}
SqlUpdateStr +="";
}
this.Label1.Text = SqlUpdateStr ;
//Response.Redirect(Request.UrlReferrer.ToString());
GvDataBind(); }
}
解决方案 »
- Lucene.net 如何查询一个关键词 并且ID大于指定的数据
- 请问如何用C#代码或者SQL代码关闭1433端口?
- DataGridView和Bindingnavigator联动问题!
- Visual Studio的智能感知一闪而过,是怎么回事?
- 为什么我没有定义构造函数也没报错,正常执行了~~
- Assembly类没有构造函数,并且此类也不是静态类.请问这个类还有什么作用?
- sprintf在c#里面有什么好的方法吗?
- 急!用.NET如何实现 “短信平台”也就是 “用一台内部服务器的USB接口,实现向手机发短信。。不通过Internet网" 谢谢^_^ 高分赠送啊。。
- 求救:怎样可以在ASPX页间传递参数呀?前面有人提过用SESSION,不过在下又不知道怎样刷新,还有用JAVASCRIPT怎么实现?
- 如何在代码中知道winpcap静默安装完成?
- 如何返回文件所在的文件夹名----?
- 一个控件,点击隐藏让它渐渐向右隐藏。怎么实现?
BorderColor="#999999" BorderStyle="None" BorderWidth="1px" CellPadding="3" GridLines="Vertical"
OnRowDataBound="GridView1_RowDataBound" OnRowCreated="GridView1_RowCreated">
<Columns>
<asp:TemplateField>
<ItemTemplate>
<asp:DropDownList ID="dropdown0" runat="server">
<asp:ListItem Text ="AA" Value="AA">
</asp:ListItem>
</asp:DropDownList>
</ItemTemplate>
</asp:TemplateField>
</Columns>
</asp:GridView>就找的到这个值!!!!
gvr.FindControl("dropdown1") as DropDownList 试试
1 AA BB
2 AA BB
3 BB AA
up
支持LZ严谨的治学精神
赞
jf
问题依旧期望孟子
{
if (!IsPostBack)
{
GvDataBind();
}
}
改成
protected void Page_Load(object sender, EventArgs e)
{
GvDataBind();
}
这样的话 就会提取的到值但是 变成 这个过程在第2次GvDataBind() 时就是提取页面上的数据不知道为什么 这种.NET的机制实在是搞不清有了解意思的解释下 为什么 动态模板列 要每次PAGE_LOAD时都要 加载一下吗?而且理论上说 我的加载是有根据数据库表,初始化数据的那为什么 BUTTON1 的提交 后, PAGE_LOAD竟然是提取到 现有页面上的值
期待高人......
gvdatabind 直接放在PAGE_LOAD每次都会从数据表里提取 原来的值如果啥都没做的话
应该GRIDVIEW值 又返回原有数据表状态了但是实际上点了
BUTTON1 的话, 取到了页面上的值同时 页面重新gvdatabind 只是绑定了数据列, 而数据列 并没有被原始数据表更新掉保留了原有的值 EnableViewState="true" 这个设成 false
也是一样相当于 protected void GridView1_RowDataBound(object sender, GridViewRowEventArgs e)
{
if (e.Row.RowType == DataControlRowType.DataRow)
{
System.Data.DataRowView drv = (System.Data.DataRowView)e.Row.DataItem;
for (int i = 0; i < e.Row.Cells.Count; i++)
{
DropDownList ddl = (DropDownList)e.Row.FindControl("dropdown" + i.ToString());
if (ddl != null)
{
try
{
//这边初始化成功!!!
ddl.Items.FindByText(drv[i].ToString()).Selected = true;
}
catch
{ }
}
} }
}
这个过程 并没有 提取原始值
但是 实际上 调试单步时 执行了
ddl.Items.FindByText(drv[i].ToString()).Selected = true;不知所以然
都是粘来粘去的
贴子原创的太少太少没啥重要作用