我需要關於我的代碼的指導。按鈕單擊事件不會觸發併發生錯誤
public class FacultyTemplatedynamic:ITemplate
{
ListItemType ItemType;
string FieldName;
string InfoType;
private bool isEditMode = false;
protected bool isInEditMode
{
get { return this.isEditMode; }
set { this.isEditMode = value; }
}
public FacultyTemplatedynamic(ListItemType itemType, string field_name, string info_type)
{
FieldName = field_name;
ItemType = itemType;
InfoType = info_type;
}
public void InstantiateIn(Control container)
{
switch (ItemType)
{
case ListItemType.Header:
Literal header_litrl = new Literal();
header_litrl.Text = "<b>" + FieldName + "</b>";
container.Controls.Add(header_litrl);
break;
case ListItemType.Item:
switch (InfoType)
{
case "Command":
ImageButton edit_button = new ImageButton();
edit_button.ID = "edit_button";
edit_button.ImageUrl = "~/Images/edit.gif";
edit_button.CommandName = "Edit";
edit_button.ToolTip = "Edit";
container.Controls.Add(edit_button);
break;
default:
Label field_lbl = new Label();
field_lbl.ID = "labelName";
//field_lbl.Visible =!(bool) isInEditMode;
field_lbl.Text = String.Empty; //we will bind it later through 'OnDataBinding' event
field_lbl.DataBinding += new EventHandler(OnDataBinding);
container.Controls.Add(field_lbl);
break;
}
break;
case ListItemType.EditItem:
if (InfoType == "Command")
{
ImageButton update_button = new ImageButton();
update_button.ID = "update_button";
update_button.CommandName = "Update";
update_button.ImageUrl = "~/Images/update.gif";
update_button.ToolTip = "Update";
update_button.OnClientClick = "return confirm('Are you sure to update the record?')";
container.Controls.Add(update_button);
ImageButton cancel_button = new ImageButton();
cancel_button.ImageUrl = "~/Images/cancel.gif";
cancel_button.ID = "cancel_button";
cancel_button.CommandName = "Cancel";
cancel_button.ToolTip = "Cancel";
container.Controls.Add(cancel_button);
}
else// for other 'non-command' i.e. the key and non key fields, bind textboxes with corresponding field values
{
Label field_lbl1 = new Label();
field_lbl1.ID = "LabelEdit";
//field_lbl1.Visible = (bool)isInEditMode;
field_lbl1.Text = String.Empty; //we will bind it later through 'OnDataBinding' event
field_lbl1.DataBinding += new EventHandler(OnDataBinding);
container.Controls.Add(field_lbl1);
}
break;
}
}
private void OnDataBinding(object sender, EventArgs e)
{
object bound_value_obj = null;
Control ctrl = (Control)sender;
IDataItemContainer data_item_container = (IDataItemContainer)ctrl.NamingContainer;
bound_value_obj = DataBinder.Eval(data_item_container.DataItem, FieldName);
switch (ItemType)
{
case ListItemType.Item:
Label field_ltrl = (Label)sender;
field_ltrl.Text = bound_value_obj.ToString();
break;
case ListItemType.EditItem:
TextBox field_txtbox = (TextBox)sender;
field_txtbox.Text = bound_value_obj.ToString();
break;
}
}
}
private void CreateTemplatedGridView()
{
PopulateTable();
for (int i = 0; i < dt.Columns.Count; i++)
{
TemplateField tf = new TemplateField();
tf.HeaderTemplate = new FacultyTemplatedynamic(ListItemType.Header, dt.Columns[i].ColumnName, dt.Columns[i].DataType.Name);
tf.ItemTemplate = new FacultyTemplatedynamic(ListItemType.Item, dt.Columns[i].ColumnName, dt.Columns[i].DataType.Name);
tf.EditItemTemplate = new FacultyTemplatedynamic(ListItemType.EditItem, dt.Columns[i].ColumnName, dt.Columns[i].DataType.Name);
GrdMarkAttendance.Columns.Add(tf);
}
TemplateField tf1 = new TemplateField();
GrdMarkAttendance.Columns.Add(tf1);
GrdMarkAttendance.DataSource = dt;
GrdMarkAttendance.DataBind();
}
private void PopulateTable()
{
dt = new DataTable();
dt = obj.GetRegister();
}
protected void GrdMarkAttendance_RowDataBound(object sender, GridViewRowEventArgs e)
{
PopulateTable();
int i = dt.Columns.Count;
if (e.Row.RowType == DataControlRowType.DataRow)
{
DropDownList ddl = new DropDownList();
ddl.ID = "ddl";
ddl.Items.Insert(0, "Present");
ddl.Items.Insert(1, "Absent");
ddl.Items.Insert(2, "Leave");
e.Row.Cells[i].Controls.Add(ddl);
}
}
protected void Button1_Click(object sender, EventArgs e)
{
}
當我運行該頁面並點擊按鈕,我得到了以下錯誤:
服務器錯誤「/」應用。
找到具有相同ID'labelName'的多個控件。 FindControl要求控件具有唯一的ID。
描述:執行當前Web *請求期間發生未處理的異常。請查看堆棧跟蹤以獲取有關該錯誤的更多信息以及* *源自代碼的位置。 *
異常詳細信息:System.Web.HttpException:用相同的ID'標籤'找到了多個控制。 ** FindControl ** 要求控件具有唯一的ID。
* 源錯誤:*在當前web請求的執行過程中生成
未處理的異常。 *有關異常來源和位置的信息可以使用* 以下的異常堆棧跟蹤進行標識。
* 堆棧跟蹤:*
*[HttpException (0x80004005): Multiple controls with the same ID 'labelName' were found.* *FindControl requires that controls have unique IDs.]*
*System.Web.UI.Control.FillNamedControlsTable(Control namingContainer, ControlCollection* *controls) +265*
*System.Web.UI.Control.FillNamedControlsTable(Control namingContainer, ControlCollection* * controls)* +311
*System.Web.UI.Control.FindControl(String id, Int32 pathOffset) +145*
*System.Web.UI.Control.FindControl(String id, Int32 pathOffset) +365*
*System.Web.UI.Control.FindControl(String id, Int32 pathOffset) +365*
*System.Web.UI.Control.FindControl(String id, Int32 pathOffset) +365*
*System.Web.UI.Control.FindControl(String id, Int32 pathOffset) +365*
*System.Web.UI.Page.FindControl(String id) +38*
*System.Web.UI.Page.ProcessPostData(NameValueCollection postData, Boolean fBeforeLoad)* +287
*System.Web.UI.Page.ProcessRequestMain(Boolean includeStagesBeforeAsyncPoint, Boolean* *includeStagesAfterAsyncPoint) +4911*
- 我不知道爲什麼這個錯誤就要昨天是wroking罰款,但是當我使用 * FindControl已在行的特殊細胞它開始給我錯誤,但現在我刪除*該代碼和點擊按鈕它顯示錯誤。* 請給你的* **建議,以便如果我格式錯誤後的問題,我還可以移動
對不起或提供足夠的數據
在你每一個控制web應用應該有一個唯一的ID相同id..Find兩個或更多的控制。 – coder
你在哪裏使用ID爲'labelName'的標籤,你可以向我們展示gridview設計代碼.. –
@AmolKolekar請檢查頂部的代碼現在我動態創建模板字段並將它們添加到gridview編程 – Ranjan