Как запустить событие щелчка LinkButton в GridView и показать всплывающее окно в asp.netC#

Место общения программистов C#
Ответить Пред. темаСлед. тема
Anonymous
 Как запустить событие щелчка LinkButton в GridView и показать всплывающее окно в asp.net

Сообщение Anonymous »

Я пытался создать одно представление сетки с динамическими столбцами на основе источника данных с использованием полей шаблона в asp.net с помощью кода.

Для этого мы разработали один класс DynamicTemplate, который реализует интерфейс ITemplate. В полях этого шаблона я вставил кнопку LinkButton в каждую ячейку, и когда я нажимаю кнопку ссылки на ячейку, мне нужно отобразить одно всплывающее окно с выбранным значением ячейки.

Для подробного примера загрузите его по этой ссылке

Для этого я создал одну страницу Default.asxp и написал следующее.

Код: Выделить всё

  public partial class Default : System.Web.UI.Page
{
DataTable dt;

protected void Page_Load(object sender, EventArgs e)
{
if (!IsPostBack)
GenateGridView();

}

private void GenateGridView()
{
TemplateField tempField;
DynamicTemplate dynTempItem;
LinkButton lnkButton;
Label label;

GridView gvDynamicArticle = new GridView();

gvDynamicArticle.Width = Unit.Pixel(500);
gvDynamicArticle.BorderWidth = Unit.Pixel(0);
gvDynamicArticle.Caption = "Default Grid";
gvDynamicArticle.AutoGenerateColumns = false;

DataTable data = getBindingData();

for (int i = 0; i < data.Columns.Count; i++)
{
tempField = new TemplateField();
dynTempItem = new DynamicTemplate(ListItemType.AlternatingItem);

lnkButton = new LinkButton();

lnkButton.ID = string.Format("lnkButton{0}", i);
lnkButton.Visible = true;

string ColumnValue = data.Columns[i].ColumnName;
tempField.HeaderText = ColumnValue;

if (ColumnValue == "EmpName")
{
label = new Label();

label.ID = string.Format("Label{0}", i);
dynTempItem.AddControl(label, "Text", ColumnValue);
label.Width = 100;
}
else
{
dynTempItem.AddControl(lnkButton, "Text", ColumnValue);
lnkButton.Click += lnkButton_Click;
}
tempField.ItemTemplate = dynTempItem;
gvDynamicArticle.Columns.Add(tempField);
//////grdUserPivotDateTwo.Columns.Add(tempField);
}

gvDynamicArticle.DataSource = data;
gvDynamicArticle.DataBind();

divContainer.Controls.Add(gvDynamicArticle);

}

void lnkButton_Click(object sender, EventArgs e)
{
// showing cell values in popUp here..
ClientScript.RegisterStartupScript(this.GetType(), "alert", "alert('cell clicked')");
}

private DataTable getBindingData()
{
dt = new DataTable();
dt.Columns.Add(new DataColumn("EmpName"));
dt.Columns.Add(new DataColumn("Monday"));
dt.Columns.Add(new DataColumn("TuesDay"));
dt.Columns.Add(new DataColumn("WednesDay"));
dt.Columns.Add(new DataColumn("ThursDay"));

dt.Rows.Add("EmpOne", "p", "p", "p", "a");
dt.Rows.Add("EmpTwo", "p", "a", "p", "p");
dt.Rows.Add("EmpThree", "p", "p", "p", "a");
dt.Rows.Add("EmpFour", "p", "a", "p", "p");
dt.Rows.Add("EmpFive", "p", "p", "p", "a");
dt.Rows.Add("EmpSix", "a", "p", "p", "p");

return dt;

}

}
и соответствующий класс DynamicTemplate —

Код: Выделить всё

public class DynamicTemplate : System.Web.UI.ITemplate
{
System.Web.UI.WebControls.ListItemType templateType;
System.Collections.Hashtable htControls = new System.Collections.Hashtable();
System.Collections.Hashtable htBindPropertiesNames = new System.Collections.Hashtable();
System.Collections.Hashtable htBindExpression = new System.Collections.Hashtable();

public DynamicTemplate(System.Web.UI.WebControls.ListItemType type)
{
templateType = type;
}

public void AddControl(WebControl wbControl, String BindPropertyName, String BindExpression)
{
htControls.Add(htControls.Count, wbControl);
htBindPropertiesNames.Add(htBindPropertiesNames.Count, BindPropertyName);
htBindExpression.Add(htBindExpression.Count, BindExpression);

}

public void InstantiateIn(System.Web.UI.Control container)
{
PlaceHolder ph = new PlaceHolder();

for (int i = 0; i < htControls.Count; i++)
{

//clone control
Control cntrl = CloneControl((Control)htControls[i]);

switch (templateType)
{
case ListItemType.Header:
break;
case ListItemType.Item:
ph.Controls.Add(cntrl);
break;
case ListItemType.AlternatingItem:
ph.Controls.Add(cntrl);
ph.DataBinding += new EventHandler(Item_DataBinding);
break;
case ListItemType.Footer:
break;
}
}
ph.DataBinding += new EventHandler(Item_DataBinding);

container.Controls.Add(ph);

}
public void Item_DataBinding(object sender, System.EventArgs e)
{
PlaceHolder ph = (PlaceHolder)sender;
GridViewRow ri = (GridViewRow)ph.NamingContainer;
for (int i = 0; i < htControls.Count; i++)
{
if (htBindPropertiesNames[i].ToString().Length > 0)
{
Control tmpCtrl = (Control)htControls[i];
String item1Value = (String)DataBinder.Eval(ri.DataItem, htBindExpression[i].ToString());
Control ctrl = ph.FindControl(tmpCtrl.ID);

Type t = ctrl.GetType();
System.Reflection.PropertyInfo pi = t.GetProperty(htBindPropertiesNames[i].ToString());

pi.SetValue(ctrl, item1Value.ToString(), null);
}

}

}

private Control CloneControl(System.Web.UI.Control src_ctl)
{
Type t = src_ctl.GetType();
Object obj = Activator.CreateInstance(t);
Control dst_ctl = (Control)obj;
PropertyDescriptorCollection src_pdc = TypeDescriptor.GetProperties(src_ctl);
PropertyDescriptorCollection dst_pdc = TypeDescriptor.GetProperties(dst_ctl);

for (int i = 0; i < src_pdc.Count;  i++)
{

if (src_pdc[i].Attributes.Contains(DesignerSerializationVisibilityAttribute.Content))
{

object collection_val = src_pdc[i].GetValue(src_ctl);
if ((collection_val is IList) == true)
{
foreach (object child in (IList)collection_val)
{
Control new_child = CloneControl(child as Control);
object dst_collection_val = dst_pdc[i].GetValue(dst_ctl);
((IList)dst_collection_val).Add(new_child);
}
}
}
else
{
dst_pdc[src_pdc[i].Name].SetValue(dst_ctl, src_pdc[i].GetValue(src_ctl));
}
}

return dst_ctl;

}
}
Здесь данные, отображаемые в виде сетки, в порядке. Здесь Проблемы: когда я нажимаю на ссылку, страница перезагружается, и после обратной передачи сетка не отображается.

Вторая проблема:

Код: Выделить всё

LinkButton
событие Click не срабатывает[/b].

Пожалуйста, предоставьте мне полную информацию/пример, чтобы показать модальное окно, когда мы нажимаем кнопку ссылки в виде сетки.>

Подробнее здесь: https://stackoverflow.com/questions/206 ... indow-in-a
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «C#»