2012-04-19 3 views
0

動的に作成されたGridViewがコード内に作成されています。実際のDataBindingイベントでは、編集したセルとその値を保存しているJavaScript関数が用意されています。これはページャーがなくても正常に動作します.GWにページャーを追加するとJSインデックスにページインデックスを追加する必要がありますので、実際に変更された行/セルを後で計算できます。GridViewTemplateにPageIndexを追加できません:ITemplate javascript関数

// 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; 
     } 
    } 

私はJSに「grdMain.PageIndex」を追加しようとしましたが、次のエラーが発生します。「アウタータイプの非静的メンバにアクセスすることはできません....

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"); 
    ...... 
+0

grdMainは何ですか?あなたはどこにアクセスしていますか? page_loadのように見えますか? –

+0

grdMainはGridView IDで、btnをクリックするとテーブルが作成されません。 – Jake

答えて

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)"); 

    } 

} 
関連する問題