C# 在AJAX accordion中更新DataGrid
我有一个来自AJAX控制工具包的AJAX手风琴,在一个页面上,面板的内部有一个datagrid。我有一个自定义itemtemplate,用于在单击行上的“编辑”时创建一个多行文本框。当我单击行上的“更新”时,文本框的原始内容将呈现到文本框中。它应该更新并返回文本,而不是文本框。当我将DataBind()放入!当我单击“手风琴”窗格时,它不会被渲染。有什么想法吗 代码:C# 在AJAX accordion中更新DataGrid,c#,asp.net,datagrid,ajaxcontroltoolkit,edititemtemplate,C#,Asp.net,Datagrid,Ajaxcontroltoolkit,Edititemtemplate,我有一个来自AJAX控制工具包的AJAX手风琴,在一个页面上,面板的内部有一个datagrid。我有一个自定义itemtemplate,用于在单击行上的“编辑”时创建一个多行文本框。当我单击行上的“更新”时,文本框的原始内容将呈现到文本框中。它应该更新并返回文本,而不是文本框。当我将DataBind()放入!当我单击“手风琴”窗格时,它不会被渲染。有什么想法吗 代码: 受保护的无效页面加载(对象发送方,事件参数e) { announ.HeaderStyle.CssClass=“header”;
受保护的无效页面加载(对象发送方,事件参数e)
{
announ.HeaderStyle.CssClass=“header”;
注释宽度=单位百分比(100);
announ.GridLines=GridLines.None;
announ.AutoGenerateColumns=false;
announ.CellPadding=10;
announ.CellSpacing=0;
announ.horizontallign=horizontallign.Center;
announ.HeaderStyle.Font.Bold=true;
announ.EnableViewState=false;
announ.AlternatingItemStyle.BackColor=System.Drawing.Color.GhostWhite;
//announ.DeleteCommand+=AnnounDeleteCommand;
announ.EditCommand+=announ_EditCommand;
announ.UpdateCommand+=announ\u UpdateCommand;
announ.CancelCommand+=announ\u CancelCommand;
announ.DataKeyField=“id”;
var tc1=新模板列
{
HeaderTemplate=新
DataGridTemplate(ListItemType.Header,“公告”),
ItemTemplate=新的DataGridTemplate(ListItemType.Item,“公告文本”),
EditItemTemplate=新建
DataGridTemplate(ListItemType.EditItem,“公告文本”)
};
var editColumn=新的EditCommandColumn
{
ButtonType=ButtonColumnType.Button,
HeaderText=“编辑”,
EditText=“编辑”,
UpdateText=“更新”,
CancelText=“取消”
};
var dateColumn=newboundcolumn{HeaderText=“postedon”,DataField=“date”,ReadOnly=true};
var expirationColumn=newboundcolumn{HeaderText=“到期日期”,DataField=“到期日”};
添加注释列(tc1);
announ.Columns.Add(dateColumn);
announ.Columns.Add(expirationColumn);
announ.DataSource=myannounces;
announ.DataBind();
var deptMgtaccord=新手风琴
{
ID=“deptmgtcord”,
headercsclass=“手风琴头”,
headerSelected cssclass=“手风琴头Selected”,
自动调整大小=自动调整大小。无,
SelectedIndex=0,
FadeTransitions=true,
转换持续时间=250,
FramesPerSecond=40,
RequiredPane=false,
SuppressHeaderPostbacks=true
};
如果(iPostBack)
{
deptMgtaccord.SelectedIndex=已选择;
}
var announcementPane=newacordionpane{ID=“announcementPane”};
announcementPane.HeaderContainer.Attributes.Add(“onmouseover”,“this.style.backgroundColor=”#e3e2“;”);
announcementPane.HeaderContainer.Attributes.Add(“onmouseout”,“this.style.backgroundColor=”#ffffff“;”);
announcementPane.HeaderContainer.Controls.Add(新的文字控件(“公告>>”));
announcementPane.ContentContainer.Controls.Add(announ);
deptmgtagcord.Panes.Add(公告窗格);
var statsPane=new AccordionPane{ID=“statsPane”};
statsPane.HeaderContainer.Attributes.Add(“onmouseover”,“this.style.backgroundColor=”#e3e2“;”;
statsPane.HeaderContainer.Attributes.Add(“onmouseout”,“this.style.backgroundColor=”#ffffff“;”);
statsPane.HeaderContainer.Controls.Add(新的文字控件(“统计信息>>”));
statsPane.ContentContainer.Controls.Add(新的LiteralControl(“Stats”));
deptmgtagcord.Panes.Add(statsPane);
ph1.对照品.添加(deptMgtaccord);
}
受保护的void announ_CancelCommand(对象源,DataGridCommandEventArgs e)
{
announ.EditItemIndex=-1;
announ.DataBind();
}
受保护的void announ_UpdateCommand(对象源,DataGridCommandEventArgs e)
{
var dc=新的MTCDataContext();
var announText=(TextBox)e.Item.Cells[1]。控件[1];
int announId=(int)announ.DataKeys[e.Item.ItemIndex];
var currentAnnoun=(来自dc中的a)
其中a.id==announId
选择一个.SingleOrDefault();
currentAnnoun.announcement\u text=announText.text;
dc.提交更改();
protected void Page_Load(object sender, EventArgs e)
{
announ.HeaderStyle.CssClass = "header";
announ.Width = Unit.Percentage(100);
announ.GridLines = GridLines.None;
announ.AutoGenerateColumns = false;
announ.CellPadding = 10;
announ.CellSpacing = 0;
announ.HorizontalAlign = HorizontalAlign.Center;
announ.HeaderStyle.Font.Bold = true;
announ.EnableViewState = false;
announ.AlternatingItemStyle.BackColor = System.Drawing.Color.GhostWhite;
//announ.DeleteCommand += AnnounDeleteCommand;
announ.EditCommand += announ_EditCommand;
announ.UpdateCommand += announ_UpdateCommand;
announ.CancelCommand += announ_CancelCommand;
announ.DataKeyField = "id";
var tc1 = new TemplateColumn
{
HeaderTemplate = new
DataGridTemplate(ListItemType.Header, "Announcement"),
ItemTemplate = new DataGridTemplate(ListItemType.Item, "announcement_text"),
EditItemTemplate = new
DataGridTemplate(ListItemType.EditItem, "announcement_text")
};
var editColumn = new EditCommandColumn
{
ButtonType = ButtonColumnType.PushButton,
HeaderText = "Edit",
EditText = "Edit",
UpdateText = "Update",
CancelText = "Cancel"
};
var dateColumn = new BoundColumn {HeaderText = "Posted On", DataField = "date", ReadOnly = true};
var expirationColumn = new BoundColumn {HeaderText = "Expiration Date", DataField = "expiration_date"};
announ.Columns.Add(tc1);
announ.Columns.Add(dateColumn);
announ.Columns.Add(expirationColumn);
announ.DataSource = myAnnouncements;
announ.DataBind();
var deptMgtaccord = new Accordion
{
ID = "deptMgtaccord",
HeaderCssClass = "accordion-header",
HeaderSelectedCssClass = "accordion-headerSelected",
AutoSize = AutoSize.None,
SelectedIndex = 0,
FadeTransitions = true,
TransitionDuration = 250,
FramesPerSecond = 40,
RequireOpenedPane = false,
SuppressHeaderPostbacks = true
};
if (IsPostBack)
{
deptMgtaccord.SelectedIndex = selected;
}
var announcementPane = new AccordionPane {ID = "announcementPane"};
announcementPane.HeaderContainer.Attributes.Add("onmouseover", "this.style.backgroundColor='#e3e2e2';");
announcementPane.HeaderContainer.Attributes.Add("onmouseout", "this.style.backgroundColor='#ffffff';");
announcementPane.HeaderContainer.Controls.Add(new LiteralControl("Announcements >>"));
announcementPane.ContentContainer.Controls.Add(announ);
deptMgtaccord.Panes.Add(announcementPane);
var statsPane = new AccordionPane {ID = "statsPane"};
statsPane.HeaderContainer.Attributes.Add("onmouseover", "this.style.backgroundColor='#e3e2e2';");
statsPane.HeaderContainer.Attributes.Add("onmouseout", "this.style.backgroundColor='#ffffff';");
statsPane.HeaderContainer.Controls.Add(new LiteralControl("Statistics >>"));
statsPane.ContentContainer.Controls.Add(new LiteralControl("Stats"));
deptMgtaccord.Panes.Add(statsPane);
ph1.Controls.Add(deptMgtaccord);
}
protected void announ_CancelCommand(object source, DataGridCommandEventArgs e)
{
announ.EditItemIndex = -1;
announ.DataBind();
}
protected void announ_UpdateCommand(object source, DataGridCommandEventArgs e)
{
var dc = new MTCDataDataContext();
var announText = (TextBox) e.Item.Cells[1].Controls[1];
int announId = (int)announ.DataKeys[e.Item.ItemIndex];
var currentAnnoun = (from a in dc.announcements
where a.id == announId
select a).SingleOrDefault();
currentAnnoun.announcement_text = announText.Text;
dc.SubmitChanges();
announ.EditItemIndex = -1;
announ.DataBind();
}
protected void announ_EditCommand(object source, DataGridCommandEventArgs e)
{
announ.EditItemIndex = e.Item.ItemIndex;
announ.DataBind();
}
public class DataGridTemplate : ITemplate
{
ListItemType templateType;
string columnName;
public DataGridTemplate(ListItemType type, string colname)
{
templateType = type;
columnName = colname;
}
public void InstantiateIn(Control container)
{
Literal lc = new Literal();
TextBox tb = new TextBox();
switch (templateType)
{
case ListItemType.Header:
lc.Text = "<B>" + columnName + "</B>";
container.Controls.Add(lc);
break;
case ListItemType.Item:
lc.DataBinding += lc_DataBinding;
container.Controls.Add(lc);
break;
case ListItemType.EditItem:
tb.TextMode = TextBoxMode.MultiLine;
tb.Rows = 6;
tb.Columns = 57;
tb.DataBinding += tb_DataBinding;
container.Controls.Add(tb);
break;
case ListItemType.Footer:
lc.Text = "<I>" + columnName + "</I>";
container.Controls.Add(lc);
break;
}
}
void tb_DataBinding(object sender, EventArgs e)
{
TextBox tb = (TextBox)sender;
DataGridItem row = (DataGridItem)tb.NamingContainer;
tb.ID = "txt_" + row.ItemIndex;
tb.Text = DataBinder.Eval(row.DataItem, columnName).ToString();
}
void lc_DataBinding(object sender, EventArgs e)
{
Literal lc = (Literal)sender;
DataGridItem row = (DataGridItem)lc.NamingContainer;
lc.ID = "txt_" + row.ItemIndex;
lc.Text = DataBinder.Eval(row.DataItem, columnName).ToString();
}
}