C# 如何在asp.net中刷新数据更改的表UI?
我的asp.net项目中有一个表,我在运行时动态地向某些单元格添加一些按钮。我根据从数据库中获取的数据添加这些按钮。用户从下拉列表中选择一个项目,单击ShowSchedule按钮,表格被填充。以下是我的一些代码:C# 如何在asp.net中刷新数据更改的表UI?,c#,asp.net,C#,Asp.net,我的asp.net项目中有一个表,我在运行时动态地向某些单元格添加一些按钮。我根据从数据库中获取的数据添加这些按钮。用户从下拉列表中选择一个项目,单击ShowSchedule按钮,表格被填充。以下是我的一些代码: for (int i = startindex; i < endindex; i++) { Button b = new Button(); b.Text = subj + " " + numb + " " + section; b.Attributes.
for (int i = startindex; i < endindex; i++)
{
Button b = new Button();
b.Text = subj + " " + numb + " " + section;
b.Attributes.Add("onclick", "popWin()");
b.CssClass = "roundedbuttons";
Color clr = getCourseColor(subj + numb + section, courses);
b.BackColor = Color.Aqua;
b.Enabled = true;
b.EnableViewState = true;
b.UseSubmitBehavior = false;
b.UseSubmitBehavior = false;
b.Click += new EventHandler(btn_Click);
string cellPosition = (i).ToString() + ";" + (dayindex).ToString();
b.CommandArgument = cellPosition;
table_row_click = true;
table_filter_instructor_schedule.Rows[i].Cells[dayindex].Controls.Add(b);
pageControls.Add(new PageControls(i, dayindex, null, subj + " " + numb + " " + section, "button"));
visualTable = table_filter_instructor_schedule;
}
在那之前一切都很好。问题是,这些更改没有反映在可视表格中,一些按钮的位置(单元格)必须在表格中更改。如果我转到另一个页面,然后重新打开包含此可视表的页面,则该表将被更新并正常工作。但在用户单击“保存更改”按钮后,更改不会立即显示在表中。即使causesValidation属性设置为true,“保存更改”按钮也不会导致回发。我需要重新加载页面。我试过:
Response.Redirect(Request.RawUrl);
数据更新后,但这次页面被重新加载,表自然显示为空
有人能帮我吗
谢谢。基于我认为您正在尝试做的事情,这就是我的建议: 单击“显示计划”时运行的代码应放置在其自身的子项中。 当用户单击“ShowSchedule”时调用该Sub。 然后在代码后再次调用该Sub以“保存更改” 关于这一评论: “保存更改”按钮不会导致回发,即使 causesValidation属性设置为true
你的页面上有更新面板吗?这可能会导致回发问题 这是我要问你的问题。您正在动态创建这些按钮吗?如果是这样,他们将永远不会启动该活动。这就是原因。如果在呈现窗体时未创建按钮,或者在实例化类(代码隐藏文件)时未创建按钮,则按钮将不会与fire或click事件连接。您首先需要在应用程序启动时创建按钮,或者在页面加载事件触发时更直接地创建按钮。创建多少并不重要,只要在应用程序运行时有足够的空间。因此,从一组按钮开始,使用循环创建任意数量的按钮。执行此操作并添加属性,例如单击事件名称。我在下面发布了一些代码,这些代码将准确地向您展示如何做到这一点。如果你对我在这里发布的任何东西有任何疑问,请提问
/* Place this above the Page_Load event */
Button[] btnArray;
/* Call this method or something similar to instantiate the buttons */
private void InstantiateBtns()
{
//Instatiate every possible button needed for some purpose
btnArray = new Button[1000];
for (int i = 0; i < btnArray.Length; i++)
{
btnArray[i] = new Button();
// sets the attributes for the button control
btnArray[i].ID = "ContactBtn" + i;
btnArray[i].Width = 295;
btnArray[i].Height = 50;
btnArray[i].BorderStyle = BorderStyle.None;
btnArray[i].CssClass = "contacts";
btnArray[i].Click += new EventHandler(this.btnContactBtn_Click);
btnArray[i].Attributes.Add("runat", "server");
}
} // end of InstantiateBtns()
/*将其置于页面加载事件上方*/
按钮[]btnArray;
/*调用此方法或类似的方法来实例化按钮*/
私有void实例化ebtns()
{
//为某种目的安装所有可能的按钮
btnArray=新按钮[1000];
对于(int i=0;i
每次更新后,您都必须重新创建表。谢谢,但我会在回发后重新创建按钮。代码中的pageControls变量保持动态创建的按钮,这些按钮的onclick函数工作正常。问题是,我有一个模式弹出窗口,这个模式弹出窗口的保存按钮也会被触发,但是当点击保存按钮时,没有回发,页面加载没有被调用,在首次加载页面时,您是通过在页面加载事件中创建保存按钮还是从页面加载事件中调用方法来创建保存按钮?您放在“b.Attributes.Add”(“onclick”,“popWin()”)上方的语句是您试图触发的事件吗?如果是这样的话,请尝试我在帖子“btnArray[I].Click+=neweventhandler(this.btnContactBtn_Click);”中显示的内容?我知道这种添加点击事件的方法是正确的,因为我经常使用它。谢谢你的回答,是的,我的页面中有一个模式弹出扩展程序,保存按钮在弹出窗口中。它的onclick函数被调用并工作,但是没有回发发生。所以有一个弹出扩展程序,但是有一个更新面板吗?听起来好像有。表格是否也在弹出窗口内,还是仅在“保存”按钮内?
/* Place this above the Page_Load event */
Button[] btnArray;
/* Call this method or something similar to instantiate the buttons */
private void InstantiateBtns()
{
//Instatiate every possible button needed for some purpose
btnArray = new Button[1000];
for (int i = 0; i < btnArray.Length; i++)
{
btnArray[i] = new Button();
// sets the attributes for the button control
btnArray[i].ID = "ContactBtn" + i;
btnArray[i].Width = 295;
btnArray[i].Height = 50;
btnArray[i].BorderStyle = BorderStyle.None;
btnArray[i].CssClass = "contacts";
btnArray[i].Click += new EventHandler(this.btnContactBtn_Click);
btnArray[i].Attributes.Add("runat", "server");
}
} // end of InstantiateBtns()