一、在向Grid里添加控件的时候,可以用以下方法动态添加,不过这种方式添加的控件类型有限,也不是很灵活。
if (!uwg_tagconfig.Columns.Exists("detail"))
{
uwg_tagconfig.Columns.Add(new UltraGridColumn("detail", "查看详情", ColumnType.Button, "详情"));
}
for (i = 0; i < uwg_tagconfig.Rows.Count; i++)
{
uwg_tagconfig.Rows[i].Cells.FromKey("detail").Text = "查看详情";
}
Grid响应这个事件:
protected void uwg_tagconfig_ClickCellButton(object sender, CellEventArgs e)
二、还可以手动创建模版列,然后添加控件,可以添加任何控件:
1、手动添加模板列。编辑模板-》选择CellTemplate,从控件箱里拖动控件到模板内:
<celltemplate>
<asp:Button ID="Button1" CausesValidation="false" runat="server" OnClick="Button1_Click" Text="删除" Width="100%" />
</celltemplate>
2、添加响应事件 protected void Button1_Click(object sender, EventArgs e),用法和普通按钮一样。
3、通过下面代码设置该控件属性
TemplatedColumn tc = (TemplatedColumn)uwg_tagconfig.Columns.FromKey("delete");
foreach (CellItem row in tc.CellItems)
{
Button btn = (Button)row.FindControl("Button1");
btn.Attributes.Add("onclick", "if(!window.confirm('您确认要删除吗?'))return false;");
}
//uwg_tagconfig.Columns.FromKey("delete").Move(20);
4、在按钮事件里,通过下列代码获取行号,读取该行其他列的信息:
Button btn = (Button)sender;
int rowindex = ((CellItem)btn.NamingContainer).Cell.Row.Index;
三、遇到的问题:
1、设置完按钮的属性后,给每个按钮加了客户端代码onclick提示删除,如果这时在Button1_Click里编写弹出对话框代码,可能不会弹出后面的对话框。
2、在测试的时候,我发现页面加载后,第一次点击按钮,不会执行Button1_Click里代码,而第二次和以后就不会出问题了,最后发现是多了这句
uwg_tagconfig.Columns.FromKey("delete").Move(20);,不知道为什么不能调列的位置。