У меня есть код ниже, который работает нормально; когда я нажимаю кнопку удаления, событие срабатывает, но изменения не отображаются на PostBack. Это, очевидно, имеет отношение к управлению PostBack. У кого-нибудь есть предложения?Проблемы с обратной связью с событиями OnClick
namespace WebApplication1
{
public partial class questiondetails : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
if (!IsPostBack)
{
LoadControls();
}
}
void Edit_Click(object sender, ImageClickEventArgs e)
{
ImageButton editbut = sender as ImageButton;
string cName = editbut.ID;
string rID = cName.Remove(0, 5);
Response.Write(Request.Form["entity_" + rID]);
Response.Write(Request.Form["dollar_" + rID]);
}
void Delete_Click(object sender, ImageClickEventArgs e)
{
var delbut = (ImageButton)sender;
string cName = delbut.ID;
string rID = cName.Remove(0, 7);
string MyParams = "@RowID=" + rID;
iservices.DataAccessWebService WS = new iservices.DataAccessWebService();
WS.ExecuteDatasetStoredProcedure(ConfigurationManager.AppSettings["SecurityDataAccess"], "iweb_sp_custom_coi_Question_Delete", MyParams.ToString());
LoadControls();
Response.Write("dome");
}
protected void LoadControls()
{
//Construct paramters from Querystring
StringBuilder MyParams = new StringBuilder();
MyParams.Append("@Term=2013,@ProjectCode=a12345,@ID=123,@CategoryCode=CONSULTANCIES");
//Count Answered questions
iservices.DataAccessWebService WS = new iservices.DataAccessWebService();
DataSet MyAnswers = WS.ExecuteDatasetStoredProcedure(ConfigurationManager.AppSettings["SecurityDataAccess"], "iweb_sp_custom_coi_SelectCurrentQuestion", MyParams.ToString());
foreach (DataTable dt in MyAnswers.Tables)
{
int rc = 0;
foreach (DataRow dr in dt.Rows)
{
//Generate unique controls from DS
TextBox tbx = new TextBox();
tbx.ID = "entity_" + dr["rowID"].ToString();
tbx.Text = dr["EntityName"].ToString();
tbx.Width = 200;
DropDownList DollarRange = new DropDownList();
DollarRange.Items.Add("Select Dollar Amount");
DollarRange.Items.Add("Up to $1,000");
DollarRange.Items.Add("$1,001 - 5,000");
DollarRange.Items.Add("$5,001 - $10,000");
DollarRange.Items.Add("$10,001 - $50,000");
DollarRange.Items.Add("$50,001 - or more");
DollarRange.ID = "dollar_" + dr["rowID"].ToString();
DollarRange.SelectedValue = dr["DollarRange"].ToString();
ImageButton Delete = new ImageButton();
Delete.ImageUrl = "delete.png";
Delete.ID = "delete_" + dr["rowID"].ToString();
Delete.Click += Delete_Click;
ImageButton Edit = new ImageButton();
Edit.ImageUrl = "edit.png";
Edit.ID = "edit_" + dr["rowID"].ToString();
Edit.Click += Edit_Click;
//Append controls to placeholder
DataZone.Controls.Add(new LiteralControl((rc % 2 == 0) ? "<tr><td bgcolor='#f1f0e7'>" : "<tr><td>"));
DataZone.Controls.Add(tbx);
DataZone.Controls.Add(new LiteralControl((rc % 2 == 0) ? "</td><td bgcolor='#f1f0e7'>" : "</td><td>"));
DataZone.Controls.Add(DollarRange);
DataZone.Controls.Add(new LiteralControl((rc % 2 == 0) ? "</td><td bgcolor='#f1f0e7'>" : "</td><td>"));
DataZone.Controls.Add(Delete);
DataZone.Controls.Add(Edit);
DataZone.Controls.Add(new LiteralControl("</td></tr>"));
rc++;
}
}
}
}
}
Да, данные не возвращаются. Я проверил БД, и информация все еще там. Если я снова загружу страницу с обновлением, мои мои данные снова появятся. –
Устраняет ли метод Delete_Click, когда вы нажимаете его в пользовательском интерфейсе? –
Нет. Я переместил код в раздел page_load, и он запускает и удаляет запись, но мои данные отображаются до обработки пересмотренных данных, поэтому я вижу старые результаты. –