gpt4 book ai didi

c# - 将 DataGrid 作为子控件的 CompositeControl。不触发更新/取消事件

转载 作者:太空宇宙 更新时间:2023-11-03 14:06:05 25 4
gpt4 key购买 nike

我正在尝试创建一个 CompositeControl,其中有一个 DataGrid 作为子控件。我让 Edit 命令工作,但是 Update(我删除了这个例子的更新事件代码以使其更容易阅读)和 Cancel 事件没有被触发。我真的不知道我做错了什么,谷歌也没有为我提供关于这个主题的教程(Datagrid 作为 CompositeControl 的子控件)。有人看到我做错了什么吗?

[ToolboxData("<{0}:ConfigEditor runat=server></{0}:ConfigEditor>")]
public class ConfigEditor : CompositeControl, INamingContainer
{
private DataGrid data;

public ConfigEditor()
{ }

protected override void CreateChildControls()
{
Controls.Clear();
data = new DataGrid();
data.AutoGenerateColumns = false;
data.BorderWidth = 0;
data.EnableViewState = false;
data.CssClass = "table table-condensed table-striped";
data.EditCommand += new DataGridCommandEventHandler(data_EditCommand);
data.CancelCommand += new DataGridCommandEventHandler(data_CancelCommand);

PopulateData();

Controls.Add(data);

base.CreateChildControls();
}

void data_CancelCommand(object source, DataGridCommandEventArgs e)
{
data.EditItemIndex = -1;
PopulateData();
}

void data_EditCommand(object source, DataGridCommandEventArgs e)
{
data.EditItemIndex = e.Item.ItemIndex;
PopulateData();
}

void PopulateData()
{
var myConfigManager = SessionState.AppContext.GetProvider<ConfigManager>();
data.DataSource = myConfigManager.LoadConfigItemsDt();
data.Columns.Clear();

TemplateColumn tcKey = new TemplateColumn();
tcKey.HeaderText = "KEY";
tcKey.ItemTemplate = new DefaultItemTemplate("KEY");
tcKey.EditItemTemplate = new DefaultItemTemplate("KEY");
data.Columns.Add(tcKey);

TemplateColumn tcString = new TemplateColumn();
tcString.HeaderText = "String";
tcString.ItemTemplate = new DefaultItemTemplate("ValueString");
tcString.EditItemTemplate = new EditTextBoxTemplate("ValueString");
data.Columns.Add(tcString);

TemplateColumn tcButtons = new TemplateColumn();
tcButtons.ItemTemplate = new EditControlTemplate("KEY");
tcButtons.EditItemTemplate = new UpdateControlTemplate("KEY");
data.Columns.Add(tcButtons);

data.DataBind();
}

protected override void RenderContents(HtmlTextWriter output)
{
data.RenderControl(output);
}
}

最佳答案

一些可能有帮助也可能没有帮助的评论:

  • 我会考虑使用 GridView 而不是 DataGridDataGrid 自 .NET 2.0 以来已过时。

  • 代码中的一个奇怪之处是您从 CreateChildControls 调用 DataBind (CreateChildControls > PopulateData > DataBind)。此外,您在将 DataGrid 添加到控件树之前调用它,这意味着在绑定(bind)期间所做的任何更改都不会持久保存到 ViewState。如果没有看到更多代码,我不太确定这会产生什么影响,但我肯定会考虑将 DataBind() 移出 CreateChildControls。

关于c# - 将 DataGrid 作为子控件的 CompositeControl。不触发更新/取消事件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9275014/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com