<asp:GridView ID="GridView1" runat="server" AutoGenerateColumns="False">
<Columns>
<asp:TemplateField HeaderText="水排">>
<ItemTemplate>
<asp:TextBox ID="txt1" Text='<% # Eval("ALL") %>' runat="server"></asp:TextBox>
</ItemTemplate>
</asp:TemplateField>
<asp:TemplateField HeaderText="面料">>
<ItemTemplate>
<asp:TextBox ID="txt2" Text='<% # Eval("FIRST") %>' runat="server"></asp:TextBox>
</ItemTemplate>
</asp:TemplateField>
<asp:TemplateField HeaderText="操作">
<ItemTemplate >
<asp:Button ID="btnDel" CommandArgument="<%Eval("ID") %>" OnClick="Del_Click" runat="server" Text="Button" />
</ItemTemplate>
</asp:TemplateField>
</Columns>
</asp:GridView>
本来可以很方便 写在前台的,但是根据情况绑定的个数 不一定,只能在后天 创建,里面还必须要放Text 最后一列是删除。
新人,谁能给点 代码参考吗 查了 不少资料 还没弄出来,来求救了。
<Columns>
<asp:TemplateField HeaderText="水排">>
<ItemTemplate>
<asp:TextBox ID="txt1" Text='<% # Eval("ALL") %>' runat="server"></asp:TextBox>
</ItemTemplate>
</asp:TemplateField>
<asp:TemplateField HeaderText="面料">>
<ItemTemplate>
<asp:TextBox ID="txt2" Text='<% # Eval("FIRST") %>' runat="server"></asp:TextBox>
</ItemTemplate>
</asp:TemplateField>
<asp:TemplateField HeaderText="操作">
<ItemTemplate >
<asp:Button ID="btnDel" CommandArgument="<%Eval("ID") %>" OnClick="Del_Click" runat="server" Text="Button" />
</ItemTemplate>
</asp:TemplateField>
</Columns>
</asp:GridView>
本来可以很方便 写在前台的,但是根据情况绑定的个数 不一定,只能在后天 创建,里面还必须要放Text 最后一列是删除。
新人,谁能给点 代码参考吗 查了 不少资料 还没弄出来,来求救了。
public class GridViewTextTemplate : System.Web.UI.ITemplate
{
private DataControlRowType templateType;
private string columnName;
private string Id;
public GridViewTextTemplate(DataControlRowType type, string colname, string controlId)
{
templateType = type;
columnName = colname;
Id = controlId;
}
public void InstantiateIn(System.Web.UI.Control container)
{
switch (templateType)
{
case DataControlRowType.Header:
myHeadLiteral.ID = Id;
myHeadLiteral.Text = columnName;
container.Controls.Add(myHeadLiteral);
break;
case DataControlRowType.DataRow:
TextBox txt= new TextBox();
txt.ID = cId;
txt.DataBinding += new EventHandler(this.TextBoxDataBinding);
container.Controls.Add(txt);
break;
default:
break;
}
}
private void TextBoxDataBinding(Object sender, EventArgs e)
{
TextBox txt= (TextBox)sender;
GridViewRow row = (GridViewRow)txt.NamingContainer;
txt.Text = System.Web.UI.DataBinder.Eval(row.DataItem, columnName).ToString();
}
}
void Page_Load(Object sender, EventArgs e)
{
if (!IsPostBack)
{
TemplateField tf;
tf= new TemplateField();
tf.ItemTemplate = new GridViewTextTemplate(DataControlRowType.DataRow, "", "");
tf.HeaderTemplate = new GridViewTextTemplate(DataControlRowType.Header, "", "");
GridView1.Columns.Add(tf);
} }
http://blog.csdn.net/Sandy945/archive/2009/07/31/4397142.aspx
问下非哥 我这样 绑定好以后 比如说想取 第一行 所有值 怎么取啊 用findcontrol 找补到 那个设置的控件
我按你的方法在 稍微改了下在里面都是 放的textbox. 画面已经能显示出来了
就是在最后 我想取出这些textbox 的值 往数据库 存的时候这些 textbox 的文本 我取不到.
customField.ShowHeader = true;
customField.HeaderTemplate = new GridViewTemplate(DataControlRowType.Header, "楼号");
GridViewTemplate gvt = new GridViewTemplate(DataControlRowType.DataRow, "louhao", "楼号");
customField.ItemTemplate = gvt;
gvinfo.Columns.Add(customField);
List<YmMingXiEntity> list = new List<YmMingXiEntity>();
for (int i = 0; i < gvinfo.Rows.Count; i++)
{
YmMingXiEntity wdmxentity = new YmMingXiEntity();
TextBox txt1 = (TextBox)gvinfo.Rows[i].FindControl("louhao");
string a = txt1.Text;
//list.Add(wdmxentity);
customField.ShowHeader = true;
customField.HeaderTemplate = new GridViewTemplate(DataControlRowType.Header, "楼号");
GridViewTemplate gvt = new GridViewTemplate(DataControlRowType.DataRow, "louhao", "楼号");
customField.ItemTemplate = gvt;
gvinfo.Columns.Add(customField);
List<YmMingXiEntity> list = new List<YmMingXiEntity>();
for (int i = 0; i < gvinfo.Rows.Count; i++)
{
YmMingXiEntity wdmxentity = new YmMingXiEntity();
TextBox txt1 = (TextBox)gvinfo.Rows[i].FindControl("louhao");
string a = txt1.Text;
//list.Add(wdmxentity);
就是在控件下面我放了个 保存按扭 保存的时候我想取 里面textbox的文本值.
<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
<title></title>
</head>
<body>
<form id="form1" runat="server">
<asp:GridView ID="gv" runat="server" AutoGenerateColumns="False">
</asp:GridView>
<asp:Button ID="btn" runat="server" Text="保存" OnClick="btn_Click" />
<asp:Literal ID="lit" runat="server"></asp:Literal>
</form>
</body>
</html>
public partial class GridView_DynamicTemplate : System.Web.UI.Page
{
private DataTable getDateTable()
{
DataTable dt = new DataTable();
dt.Columns.Add(new DataColumn("ID", typeof(Int32)));
dt.Columns.Add(new DataColumn("Name", typeof(String)));
DataRow dr = dt.NewRow();
dr[0] = 1;
dr[1] = "小明";
dt.Rows.Add(dr);
dr = dt.NewRow();
dr[0] = 2;
dr[1] = "小张";
dt.Rows.Add(dr);
dr = dt.NewRow();
dr[0] = 3;
dr[1] = "小王";
dt.Rows.Add(dr);
dr = dt.NewRow();
dr[0] = 4;
dr[1] = "小刘";
dt.Rows.Add(dr);
dr = dt.NewRow();
dr[0] = 5;
dr[1] = "小强";
dt.Rows.Add(dr);
return dt;
} protected override void OnInit(EventArgs e)
{
TemplateField customField = new TemplateField(); customField.ShowHeader = true;
customField.HeaderTemplate = new GridViewTemplate(DataControlRowType.Header, "动态添加列");
GridViewTemplate gvt = new GridViewTemplate(DataControlRowType.DataRow, "txt", "Name");
customField.ItemTemplate = gvt; gv.Columns.Add(customField);
base.OnInit(e);
} protected void Page_Load(object sender, EventArgs e)
{
if (!IsPostBack)
{
gv.DataSource = getDateTable();
gv.DataBind();
}
} protected void btn_Click(object sender, EventArgs e)
{
IList<string> list = new List<string>(); TextBox txt; foreach (GridViewRow row in gv.Rows)
{
txt = row.FindControl("txt") as TextBox;
if (txt != null)
{
list.Add(txt.Text);
}
} string result = string.Join(",", list.ToArray<string>()); lit.Text = result;
}
}public class GridViewTemplate : ITemplate
{ private DataControlRowType templateType; private string columnName;
private string controlID;
public GridViewTemplate(DataControlRowType type, string colname) : this(type, "", colname) { }
public GridViewTemplate(DataControlRowType type, string controlID, string colname)
{
templateType = type;
this.controlID = controlID;
columnName = colname;
}
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:
TextBox txt = new TextBox();
txt.ID = this.controlID;
txt.DataBinding += new System.EventHandler(txt_DataBinding); container.Controls.Add(txt); break;
default:
break;
}
}
void txt_DataBinding(object sender, EventArgs e)
{
TextBox txt = sender as TextBox;
if (txt != null)
{
GridViewRow container = txt.NamingContainer as GridViewRow;
if (container != null)
{
object dataValue = DataBinder.Eval(container.DataItem, columnName);
if (dataValue != DBNull.Value)
{
txt.Text = dataValue.ToString();
}
}
}
}
}
Button btn = new Button();
btn.ID = this.controlID;
if (eh != null)
{
btn.Click += new System.EventHandler(eh);
}
btn.DataBinding += new System.EventHandler(btn_DataBinding);
btn.Attributes.Add("CssClass", "button");我想 加个样式 可以实现吗 非哥已经帮助我很多了 先谢谢了