在 DataGrid 控件中以编程方式创建模板,并在代码中对模板中控件进行动态绑定数据

tubopipi 2004-01-12 02:29:58

#region Web 窗体设计器生成的代码
override protected void OnInit(EventArgs e)
{
//
// CODEGEN: 该调用是 ASP.NET Web 窗体设计器所必需的。
//
InitializeComponent();
base.OnInit(e);

TemplateColumn tc1 = new TemplateColumn();
tc1.ItemTemplate = new DataGridTemplate(ListItemType.Item,"sunyonglin","1");
tc1.HeaderTemplate = new DataGridTemplate(ListItemType.Header, "姓名","1");
DataGrid1.Columns.Add(tc1);

TemplateColumn tc2=new TemplateColumn();
tc2.ItemTemplate=new DataGridTemplate(ListItemType.Item,"性别","5");
tc2.HeaderTemplate=new DataGridTemplate(ListItemType.Header,"性别","5");

DataGrid1.Columns.Add(tc2);

TemplateColumn tc3=new TemplateColumn();
tc3.ItemTemplate=new DataGridTemplate(ListItemType.Item,"国家","2");
tc3.HeaderTemplate=new DataGridTemplate(ListItemType.Header,"国家","2");
DataGrid1.Columns.Add(tc3);

ButtonColumn bc=new ButtonColumn();
bc.Text="删除";
bc.ButtonType=ButtonColumnType.PushButton;
bc.CommandName="Delete";

DataGrid1.Columns.Add(bc);

ButtonColumn bc1=new ButtonColumn();
bc1.Text="添加";
bc1.ButtonType=ButtonColumnType.PushButton;
DataGrid1.Columns.Add(bc1);

EditCommandColumn EC=new EditCommandColumn();
EC.EditText="编辑";
EC.CancelText="取消";
EC.UpdateText="修改";
EC.HeaderText="操纵";
EC.ButtonType=ButtonColumnType.PushButton;
DataGrid1.Columns.Add(EC);

BoundColumn BC=new BoundColumn();
BC.HeaderText="序号";
BC.DataField="ID";
DataGrid1.Columns.Add(BC);

}



public class DataGridTemplate : ITemplate
{
ListItemType templateType;
string columnName;
string expressionType;



public DataGridTemplate(ListItemType type, string colname,string expression)
{
templateType = type;
columnName = colname;
expressionType=expression;

}

public void InstantiateIn(System.Web.UI.Control container)
{
Literal lc = new Literal();

switch(templateType)
{
case ListItemType.Header:
lc.Text = "<B>" + columnName + "</B>";
container.Controls.Add(lc);
break;
case ListItemType.Item:
//lc.Text = columnName;
//container.Controls.Add(lc);
//container.Controls.Add(OB);
if(expressionType=="1")
{
TextBox tb1 = new TextBox();
//tb1.Text = DataBinder.Eval(container.Parent.DataItem, "ID");

// 此处进行对模板中控件进行动态绑定数据不成功
//tb1.Text=(string)(DataBinder.Eval(container,"DataItem.ID"));


container.Controls.Add(tb1);
//DataGrid1.Controls.Add(tb1);
break;
}
else if(expressionType=="2")
{
DropDownList tb1=new DropDownList();
ListItem li=new ListItem();
li.Text="China";
li.Value="CCC";
tb1.Items.Add(li);
container.Controls.Add(tb1);
break;
}
else if(expressionType=="3")
{
ListBox tb1=new ListBox();
container.Controls.Add(tb1);
break;
}
else if(expressionType=="4")
{
RadioButton tb1=new RadioButton();
container.Controls.Add(tb1);
break;
}
else if(expressionType=="5")
{
CheckBox tb1=new CheckBox();
container.Controls.Add(tb1);
break;
}
else
{
TextBox tb1=new TextBox();
tb1.Text="";
container.Controls.Add(tb1);
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;


}
container.DataBind();
}
}





}
}
...全文
40 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
acewang 2004-01-15
  • 打赏
  • 举报
回复
see:
Creating Templates Programmatically in the DataGrid Control

http://msdn.microsoft.com/library/default.asp?url=/library/en-us/vbcon/html/vbtskcreatingtemplatesprogrammaticallyindatagridcontrol.asp
kingastar 2004-01-15
  • 打赏
  • 举报
回复
这里我看微软的说明是用的一个函数来绑定你的数据
//tb1.Text = DataBinder.Eval(container.Parent.DataItem, "ID");

// 此处进行对模板中控件进行动态绑定数据不成功
//tb1.Text=(string)(DataBinder.Eval(container,"DataItem.ID"));


试试
lc.DataBinding += new EventHandler(TemplateControl_DataBinding);
然后定义
public void TemplateControl_DataBinding(object sender, System.EventArgs e)
{
Literal lc;
lc = (Literal) sender;
DataGridItem container = (DataGridItem) lc.NamingContainer;
// lc.Text +=DataBinder.Eval(container.DataItem, lc.ID);
lc.Text+=((DataRowView)container.DataItem)[lc.ID].ToString();
}

62,039

社区成员

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

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

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

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