• 主页
  • ASP
  • .NET Framework
  • Web Services
  • VB
  • VC
  • 图表区
  • 分析与设计
  • 组件/控件开发
  • LINQ

怎样在ASP.NET的页面中,把DataGrid的表头改名??急急急!!!

usxue 2003-03-20 04:25:18
由用户自己来改动,也就是说定义TextBox,让用户自己来改名字!
怎么实现???
急!!!
谢谢!!!
...全文
30 点赞 收藏 19
写回复
19 条回复
qz4365 2003年03月23日
以我的理解,你不能确定表格中显示的列,因此要根据数据库的内容显示表头,因此可以使用在运行中动态添加列的办法,就要先实现ITemplate接口,然后再声明模板列,定义该模板列的表头,绑定的字段,这样,不但可以随意显示表头的内容,也可以自定义绑定的字段
回复 点赞
ljfppp 2003年03月22日
不明白你的意思了,连字段名都不知道,是不是你的DataGrid是通用的,可以绑定到多个表中?如果是的话,那你就要自己为DataGrid写绑定的方法了
回复 点赞
ljfppp 2003年03月21日
相 icyer()第一次说的那样在膜板列中加TextBox,你可以建立膜板列后将他的这段代码直接拷贝到你的aspx文件中,也可以在DataGrid中加入膜板列后点击有建,->编辑膜板列,然后将TextBox拖到相应的位置(Item/AlertnatingItem/HeadItem),然后就可以了
回复 点赞
usxue 2003年03月21日
真的没人帮忙啊??
回复 点赞
usxue 2003年03月21日
各位高手,能否留个联系的方式呢:
我的MSN:usxue86@msn.com
谢谢!
回复 点赞
usxue 2003年03月21日
呵呵……
我的意思你理解错了,你看看上面的问题好吗?
呵呵……
谢谢!!!
急!!!
:)
回复 点赞
icyer 2003年03月21日
在ItemCreated事件中加入:
if (e.Item.ItemType == ListItemType.Header)
{
TextBox txt = new TextBox();
e.Item.Cells[0].Controls.Add(txt);
}
回复 点赞
usxue 2003年03月21日
各位帮帮忙啊!
呵呵……
回复 点赞
usxue 2003年03月21日
我说在程序中写,怎么写啊??
因为我不知道数据中的字段名!
呵呵……
急!!!
谢谢!
回复 点赞
icyer 2003年03月21日
<asp:DataGrid id="DataGrid1" runat="server">
<Columns>
<asp:TemplateColumn>
<HeaderTemplate>
<asp:TextBox Runat="server" ID="txt"></asp:TextBox>
</HeaderTemplate>
<ItemTemplate>
<%# DataBinder.Eval(Container.DataItem,"ID") %>
</ItemTemplate>
</asp:TemplateColumn>
</Columns>
</asp:DataGrid>
回复 点赞
usxue 2003年03月21日
哎,怎样在模板中加人TextBox呢??
我是初学者啊,千万不嫌我烦啊!
呵呵……
谢谢!
急!
:)
回复 点赞
usxue 2003年03月21日
呵呵……
他是用绑定的啊,但绑定的前提是知道数据表中的字段名,但我现在的问题是,我不知道数据表的字段名,怎么办啊??
各位帮帮忙啊!
谢谢你们了!
回复 点赞
ljfppp 2003年03月20日
按照你的意思,
foreach(System.Web.UI.WebControls.TableCell tc in e.Item.Cells)
{
System.Web.UI.WebControls.TextBox tb=new System.Web.UI.WebControls.TextBox();
tb.Text=tc.Text;
tc.Controls.Add(tb);
tb.Visible=true;
}
既然是在每一行的每一列都创建TextBox,那为什么不用模板列那?
如果你的目的是页面第一次载入的时候表头是TextBox,用户修改提交以后就变成了Text表头,那么可以这样做:用模板列作表头,模板列中加入TextBox控件,然后在DataGrid的ItemCreate事件中这样写:
public void OnItemCreate(object sender,DataGridItemEventArgs e)
{
if(e.Item.ItemType == ListItemType.Header && IsPostBack)
{
string str=((TextBox)e.Item.Cells[i].FindControl("HendBox")).Text;
e.Item.Controls.Remove("HendBox");
e.Item.Cells[i].Text = str;
} }
回复 点赞
binapex 2003年03月20日
如果没有绑定,在<ItemTemplate></itemtemplate>里面放入控件也行
回复 点赞
binapex 2003年03月20日
for i=datagrid1.columns.count-1
datagrid1.columns(i).headertext=textbox(i).text;
next
前提是datagrid1必须是绑定了的。
回复 点赞
usxue 2003年03月20日
能说详细点吗??
我不是很懂,很菜的,好吗?
谢谢了!!!
急!!!
回复 点赞
qz4365 2003年03月20日
生成一个数据集表oDt,DataTable,存放列的真实字段名和对应名称,datagrid显示其对应的汉字名称,而绑定其字段名.由于绑定的字段名是不变的.改变的只是显示的名称,因此,可以这样做:
foreach(DataRow oDr in DataSet1.Table[0].Rows)
{
oTc = new TemplateColumn();
oTc.ItemTemplate = new CTemplateColumn(strShowFields);
oTc.HeaderText = oDr["Name"].ToString();
oTc.ItemStyle.Wrap = false;
this.datagrid1.Columns.Add(oTc);
}

其中,CTemplateColumn()继承了ITemplate接口,定义如下:
public class CTemplateColumn:ITemplate
{
private string colname;
public CTemplateColumn(string cname)
{
colname=cname;
}
public void InstantiateIn(Control container)
{
LiteralControl l = new LiteralControl();
l.DataBinding += new EventHandler(this.OnDataBinding);
container.Controls.Add(l);
}
public void OnDataBinding(object sender, EventArgs e)
{
LiteralControl l = (LiteralControl) sender;
DataGridItem container = (DataGridItem) l.NamingContainer;
l.Text = ((DataRowView)container.DataItem)[colname].ToString();
}
}
回复 点赞
usxue 2003年03月20日
哦……我没把问题说清楚。呵呵……
用下面的方法来创建TextBox对象:
private void DataGrid1_ItemDataBound(object sender, System.Web.UI.WebControls.DataGridItemEventArgs e)
{
foreach(System.Web.UI.WebControls.TableCell tc in e.Item.Cells)
{
System.Web.UI.WebControls.TextBox tb=new System.Web.UI.WebControls.TextBox();
tb.Text=tc.Text;
tc.Controls.Add(tb);
tb.Visible=true;
}
}

但我怎样才能把tb的值保存呢??
回复 点赞
gOODiDEA 2003年03月20日
//get Textbox1.text

private void DataGrid1_ItemDataBound(object sender, System.Web.UI.WebControls.DataGridItemEventArgs e)
{
if (e.Item.ItemType == ListItemType.Header)
{
e.Item.Cells[0].Text = Textbox1.text;
}
}
回复 点赞
发动态
发帖子
.NET技术社区
创建于2007-09-28

4.9w+

社区成员

66.8w+

社区内容

.NET技术交流专区
社区公告
暂无公告