2011-12-22 17 views
0

私はカスタムデータソースを使って動的に生成されたgridviewを持っています。GridView動的ItemTemplateフィルタリング後のEditIndex

は、GridViewのは

さんが言ってみましょう。..

は、私は、GridViewコントロールにフィルタリング機能を追加しました.. "を挿入、削除、編集を"

すべて(すべての機能)が正常に動作していることができますフィルタの後、今

SELECT * FROM <Table> 

:以前に私のデータソースは、このselect文に基づいています

濾過した後
SELECT * FROM <Table> WHERE <Filter Condition> 

..私はこれによってラインに

public void gvGridView_RowEditing(object sender, GridViewEditEventArgs e) 
    { 
     gvGridView.EditIndex = e.NewEditIndex; 
     ((TemplateField)gvGridView.Columns[1]).EditItemTemplate = null; 
     //disable editing on primary key 

     if (txtSearch.Text != string.Empty || CountRow() > 0) 
     { 
      FilterQuery(); //refilter the gridview 
     } 
     else 
     {     
      gvGridView.DataBind(); 
      //if gridview is not meant to be filtered, just leave it as it is 
     } 
     Session["SelecetdRowIndex"] = e.NewEditIndex; 
    } 

...編集モード時など..適切に編集(更新)GridViewコントロールを行うことができないです:

gvGridView.EditIndex = e.NewEditIndex;

editindexは正しく初期化されません。例:フィルタの前に

  1. は、それが何をするかのフィルタは、それが意志した後、私はこのGridViewのを編集した場合、それは、インデックスなし1

でフィルタした後、インデックスなし8

  • ましたインデックス8のデータを更新するのではなく、インデックス1のデータを上書きします。

    私は私の質問が十分明確です。いくつかの答えを聞くために:) rward ..

    編集:

    GridViewの更新時に何が起こるか、この:

    GridViewRow row = gvGridView.Rows[e.RowIndex]; 
    //decide which row being edited.. 
    
    for (int i = 0; i < Table.Columns.Count; i++) 
         { 
          string field_value = ((TextBox)row.FindControl(Table.Columns[i].ColumnName)).Text; 
          ParameterArray.Add(field_value); 
          //storing all value in that row into an array (including PK) 
         } 
    

    コードは、上記以外の罰金(店舗配列にすべての値を)動作します

  • +0

    明らかに、e.NewEditIndexは開始からのみ戻ります。索引にはない主キーのベースを編集または削除する必要があります。 – prema

    +0

    plsは私がアップデートを提供しているように精巧です。 – rofans91

    答えて

    0

    protected void Grid_RowUpdating(object sender, GridViewUpdateEventArgs e) 
    { 
        TextBox txtId = (TextBox)Grid.Rows[e.RowIndex].FindControl("txtId_insql"); 
        //Get the Id for which row is clicked 
    } 
    

    aspxページで:

    <Gridview> 
    <column> 
    <asp:BoundColumn DataField="txtId_insql" HeaderText="PrimaryID" Visible="False"></asp:BoundColumn> 
    </columns> 
    </GridView> 
    

    ますので、インデックスと同上now.Notを使用して更新することができID.Youを取得します。

    0

    グリッドインデックスに基づいてデータを更新しないでください。そのインデックスに基づいて(プライマリキーのように)キーを見つけて、そのキーに基づいてデータを更新してください(デフォルトではe.rowindex値が格納されます)グリッドをもう一度バインドする。 CSページ内の行更新イベントで

    +0

    plsは精緻に私が質問のアップデートを提供したので精巧です。 – rofans91

    関連する問題