동료와 나는 다음 코드의 EventHandlers가 실행되지 않는 이유를 알 수 없습니다. 이 함수는 첫 번째 페이지가로드되기 전에 두 번 호출되며 AutoPostBack은 true로 설정됩니다. lnkbtn
버튼과 ddlDose
DropDownList는 해고되지 않습니다. 다시 게시되지만 이벤트 핸들러는 호출하지 않습니다. 여기에 몇 가지 코드가 있습니다 ... 아무도 본질적으로 잘못된 것을 볼 수 있습니까?EventHandlers가 DropDownList 및 버튼에 대해 실행되지 않음
를 Page_Load :
protected void Page_Load(object sender, EventArgs e)
{
if (IsPostBack)
{
tblMedOrdering = (Table)Session["tblMedOrdering"];
List<string>medNames = (List<string>)Session["medNamesList"];
populateMeds(medNames);
}
}
PopulateMeds : 그것은 필요하지 않도록
protected void populateMeds(List<string> medNames)
{
if (medNames.Count == 0)
{
tblMedOrdering = (Table)Session["tblMedOrdering"];
}
else
{
DataSet ds = new DataSet();
string strConn = Application["dbconn"].ToString();
using (SqlConnection dbconn = new SqlConnection(strConn))
using (SqlCommand medDbcmd = dbconn.CreateCommand())
{
dbconn.Open();
for (int i = 0; i < medNames.Count; i++)
{
DropDownList ddlDose = new DropDownList();
DropDownList ddlSig = new DropDownList();
int flag = 0;
if ((Table)Session["tblMedOrdering"] != null)
{
for (int j = 0; j < tblMedOrdering.Rows.Count; j++)
{
if (tblMedOrdering.Rows[j].Cells[3].Text == medNames[i].ToString())
{
flag = 1;
ddlSig = (DropDownList)tblMedOrdering.Rows[i].Cells[2].FindControl(medNames[i].ToString() + "ddlSig");
if (ddlSig == null)
{
ddlSig.ID = medNames[i].ToString() + "ddlSig";
ListItem liDefaultSig = new ListItem();
liDefaultSig.Value = "0";
liDefaultSig.Text = "Select . . .";
ddlSig.Items.Add(liDefaultSig);
}
break;
}
}
}
if (flag != 1)
{
ListItem liDefault = new ListItem();
liDefault.Value = "0";
liDefault.Text = "Select . . .";
ddlDose.Items.Add(liDefault);
ddlSig.Items.Add(liDefault);
ddlDose.ID = medNames[i].ToString() + "ddlDose";
ddlSig.ID = medNames[i].ToString() + "ddlSig";
ddlDose.AutoPostBack = true;
ddlDose.TextChanged += new EventHandler(ddlDose_SelectedIndexChanged);
medDbcmd.CommandText = "Select distinct medorderid, dose from ordertablemeds where medordername = '" + medNames[i].ToString() + "'";
SqlDataReader dr = medDbcmd.ExecuteReader();
if (dr != null)
{
while (dr.Read())
{
ListItem liDose = new ListItem();
liDose.Value = dr["medorderid"].ToString();
liDose.Text = dr["dose"].ToString();
ddlDose.Items.Add(liDose);
}
dr.Close();
}
TableRow tr = new TableRow();
tr.ID = medNames[i].ToString() + "TableRow";
TableCell tcDose = new TableCell();
TableCell tcSig = new TableCell();
TableCell tcRemove = new TableCell();
TableCell tcMedName = new TableCell();
tcDose.Controls.Add(ddlDose);
tcSig.Controls.Add(ddlSig);
tcMedName.Text = medNames[i].ToString();
tcMedName.ID = medNames[i].ToString() + "medname";
LinkButton lnkbtn = new LinkButton();
lnkbtn.Text = "X";
lnkbtn.ForeColor = System.Drawing.Color.Red;
lnkbtn.ID = medNames[i].ToString() + "_lnkbtn" + tblMedOrdering.Rows.Count;
lnkbtn.Click += new EventHandler(Reset_Click);
tcRemove.Controls.Add(lnkbtn);
tr.Cells.Add(tcRemove);
tr.Cells.Add(tcDose);
tr.Cells.Add(tcSig);
tr.Cells.Add(tcMedName);
tblMedOrdering.Rows.Add(tr);
}
}
tblMedOrdering.DataBind();
dbconn.Close();
}
}
Session["tblMedOrdering"] = tblMedOrdering;
if (medNames.Count == 0)
{
cpeMeds.Collapsed = true;
cpeMeds.ClientState = "True";
}
List<string> medNamesList = new List<string>();
DropDownList ddl = new DropDownList();
for (int k = 0; k < tblMedOrdering.Rows.Count; k++)
{
ddl = (DropDownList)tblMedOrdering.Rows[k].Cells[1].FindControl(tblMedOrdering.Rows[k].Cells[3].Text +"ddlDose");
ddl.SelectedIndexChanged += new EventHandler(ddlDose_SelectedIndexChanged);
medNamesList.Add(tblMedOrdering.Rows[k].Cells[3].Text);
}
Session["medNamesList"] = medNamesList;
}
PopulateMeds, 그냥 숨김 코드에서 호출되는 문자열 이름의 목록을 제공하는 기능입니다 args는 마치 컨트롤 (개체 보낸 사람, EventArgs e) 인 것처럼 보입니다.
Page_Load() 대신 OnInit()에서 컨트롤을 바인딩 해보십시오. 또한 ASP.NET 페이지 수명주기 - http://msdn.microsoft.com/ko-kr/library/ms178472.aspx를 참조하십시오. – jrummell
이것은 완전히 중복되는 질문이 아니기 때문에 투표 마감을하지 않겠지 만 첨부 된 질문에 대한 내 대답의 기사가 통찰력을 제공 할 수 있습니다. 추가하는 컨트롤이 ViewState에 추가 될만큼 빨리 추가되지 않습니다 (따라서 이벤트가 실제로 유선 상태가 아닙니다) ... http://stackoverflow.com/questions/8050652/how-do- 프로그램 적으로 할당 된 클릭 이벤트 - 총알 목록 -pro-was-pro/8050691 # 8050691 –
@Joel 분명히 그 링크에 관심이 있습니다. 게시하기 전에 관련 추천 링크를 많이 보았지만 그 중 하나가 아니었고 아무도 실제로 관련성이 없었습니다. – rownage