Невозможно добавить PageIndex в функцию GridViewTemplate: функция ITemplate javascript

Я получил динамически созданный GridView в коде позади. Теперь во время фактического события DataBinding у меня есть функция JavaScript, которая сохраняет отредактированную ячейку и ее значение. Все это прекрасно работает без пейджера, теперь, когда я добавляю пейджер в GW, мне нужно добавить в функцию JS индекс страницы, чтобы я мог позже вычислить, какая строка / ячейка фактически была изменена.

// Databind an edit box in the grid
void edt_DataBinding(object sender, EventArgs e)
    {
        DropDownList txtData = (DropDownList)sender;
        GridViewRow container = (GridViewRow)txtData.NamingContainer;
        object dataValue = DataBinder.Eval(container.DataItem, _columnName);

        txtData.Attributes.Add("onchange", "sav(" + container.RowIndex.ToString() + "," + _columnName + ",this.value)");
        if (dataValue != DBNull.Value)
        {
            txtData.SelectedItem.Text = dataValue.ToString();
            txtData.BackColor = Color.LightGreen;
        }
    }

Я попытался добавить "grdMain.PageIndex" в JS, но возникает следующая ошибка: "Не удается получить доступ к нестатическому члену внешнего типа....

txtData.Attributes.Add("onchange", "sav(" + grdMain.PageIndex + container.RowIndex.ToString() + "," + _columnName + ",this.value)");

Любой разумный обходной путь?

Больше код:

public class GridViewTemplate : ITemplate
{
    private ListItemType _templateType;
    private string _columnName;
    private string _col;
    private string _dataType;
    private bool _isLabel;
    private bool _isCategory;
    private string _types;
    private IQueryable _role;

    public GridViewTemplate(ListItemType type, string colname, string col, string DataType, bool isLabel, bool isCategory, string types, IQueryable role)
    {
        _templateType = type; 
        _columnName = colname;
        _dataType = DataType;
        _col = col;
        _isLabel = isLabel;
        _isCategory = isCategory;
        _types = types;
        _role = role;
    }

    void ITemplate.InstantiateIn(System.Web.UI.Control container)
    {
        Label lbl = new Label();
        switch (_types)
        {....
        }
    }
    void lbl_DataBinding(object sender, EventArgs e)
    {
        Label lbl = (Label)sender;
        GridViewRow container = (GridViewRow)lbl.NamingContainer;
        object dataValue = DataBinder.Eval(container.DataItem, _columnName);
        if (dataValue != DBNull.Value)
        {
            lbl.Text = dataValue.ToString();
        }            
    }

    // Databind an edit box in the grid
    void edt_DataBinding(object sender, EventArgs e)
    {....
    }
 }

Нажатие кнопки:

    .....
    TemplateField tfUsers = new TemplateField();
    grdMain.Columns.Add(tfUsers);
    tfUsers.ItemTemplate = new GridViewTemplate(ListItemType.Item, "Name", "0", "String", true, false, "resource", lame);
    tfUsers.HeaderTemplate = new GridViewTemplate(ListItemType.Header, "Resource", "0", "String", true, false, "resource", lame);
    _dtEntry.Columns.Add("Name");
    ......

1 ответ

Я не знаю ваш полный код, поэтому я думаю, здесь...

Вы пробовали в ItemDataBound?

что-то вроде этого...

protected void grdMain_RowDataBound(object sender, GridViewRowEventArgs e)
{
   if (e.Row.RowType == DataControlRowType.DataRow)
   { 

    txtData.Attributes.Add("onchange", "sav(" + grdMain.PageIndex + container.RowIndex.ToString() + "," + _columnName + ",this.value)");

   }

}
Другие вопросы по тегам