Gridview Динамическое событие linkButton не запущено - PullRequest
1 голос
/ 27 сентября 2011

Я создаю GridView с динамическими элементами управления (включая шаблоны элементов). Вот HTML-код.

<asp:GridView ID="gvItems" runat="server" 
                        AutoGenerateColumns="False" CellPadding="4" 
                        GridLines="None" 
                        Width="95%" EmptyDataText="Records Not Found!!!!" 
                        onselectedindexchanged="gvItems_SelectedIndexChanged" 
                        onrowdatabound="gvItems_RowDataBound" onrowcommand="gvItems_RowCommand" 
                        onselectedindexchanging="gvItems_SelectedIndexChanging">
                        <RowStyle CssClass="GVRowStyle" />
                        <Columns>

                        </Columns>
                        <PagerStyle CssClass="gridPager" />
                        <SelectedRowStyle BackColor="#DCCDDA" Font-Bold="true" ForeColor="#510030" />
                        <HeaderStyle CssClass="Gheader" />
                        <AlternatingRowStyle CssClass="AlternatingRowStyle" />
                        <EditRowStyle BackColor="#7C6F57" />
                        <EmptyDataRowStyle  CssClass="EmptyRowStyle" />
                    </asp:GridView>

Вот класс для добавления ItemTemplate ...................................

public class GridViewTemplate : ITemplate
{
ListItemType _templateType;
string _columnName;

public GridViewTemplate(ListItemType type, string colname)
 {
    _templateType = type;
    _columnName = colname;
 }

void ITemplate.InstantiateIn(System.Web.UI.Control container)
{
    switch (_templateType)
    {
        case ListItemType.Header:
            Label lbl = new Label();  
            lbl.Text = _columnName;   
            container.Controls.Add(lbl);
            break;

        case ListItemType.Item:
            LinkButton Lb1 = new LinkButton(); 
            Lb1.CommandName = "Select";
            Lb1.DataBinding += new EventHandler(tb1_DataBinding);
            container.Controls.Add(Lb1);
            break;

        case ListItemType.EditItem:

            break;

        case ListItemType.Footer:
            CheckBox chkColumn = new CheckBox();
            chkColumn.ID = "Chk" + _columnName;
            container.Controls.Add(chkColumn);
            break;
    }
 }

 void tb1_DataBinding(object sender, EventArgs e)
 {
    LinkButton LinkData = (LinkButton)sender;
    GridViewRow container = (GridViewRow)LinkData.NamingContainer;
    object dataValue = DataBinder.Eval(container.DataItem, _columnName);
    if (dataValue != DBNull.Value)
    {
        LinkData.Text = dataValue.ToString();
        LinkData.ForeColor = System.Drawing.Color.Red;
        LinkData.CommandName = "Select";
    }
}

}

Вот код страницы .........................................

for (int i = 0; i < dtGrid.Columns.Count; i++)
        {
            string columnName = dtGrid.Columns[i].ColumnName;
            BoundField bField = new BoundField();
            TemplateField tField = new TemplateField();
            if (i == 0)
            {
                tField.HeaderTemplate = new GridViewTemplate(ListItemType.Header,    columnName);
                tField.ItemTemplate = new GridViewTemplate(ListItemType.Item, columnName);
                tField.HeaderStyle.HorizontalAlign = HorizontalAlign.Left;
                tField.ItemStyle.ForeColor = System.Drawing.Color.Red;
                gvItems.Columns.Add(tField);

            }
            else
            {

                bField.DataField = columnName;
                bField.HeaderText = columnName;
                bField.HeaderStyle.HorizontalAlign = HorizontalAlign.Left;
                gvItems.Columns.Add(bField);
            }

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

Ответы [ 2 ]

2 голосов
/ 27 сентября 2011

Поскольку вы создаете эти столбцы динамически, вам нужно будет воссоздавать элементы управления при каждой обратной передаче.Поскольку обработчик событий не запускается, убедитесь, что вы создали столбцы достаточно рано в жизненном цикле страницы.Я бы предложил создать динамические столбцы OnInit и посмотреть, решит ли это проблему.

0 голосов
/ 27 сентября 2011

Вы повторно привязываете данные на обратных передачах?
Убедитесь, что ваша логика привязки данных заключена в if (! IsPostback).
Повторное связывание сетки означает воссоздание вашей кнопки, и поэтому никакие события не запускаются.

...