2011-06-30 8 views
1

を選択しながら、私はデバッグモードに入ったコメントの中の値を検討してください消える:すべてのGridViewの行は行

protected void FilesGrid_SelectedIndexChanged(object sender, EventArgs e) 
{ 
    int selected = FilesGrid.SelectedIndex; // selected = 2 
    FilesGrid.DataBind(); //added after feedback in comments. it makes no change 
    int count = FilesGrid.Rows.Count; // count = 0 
    GridViewRow row = FilesGrid.Rows[selected]; // row = null 
    GridViewRow row0 = FilesGrid.Rows[0]; // row = null 
} 

SelectedValueのは、このイベントハンドラ(DataKeyNamesパラメータにnullを与え、なぜ調査している間、私はこのコードに来たの確かに設定された)。

どのように可能か説明できますか?

ありがとうございます。

PS。ここで が私のaspxコードです:ここで

<asp:GridView ID="FilesGrid" runat="server" AutoGenerateColumns="False" 
    AutoGenerateSelectButton="True" 
    onselectedindexchanged="FilesGrid_SelectedIndexChanged" 
    style="margin-top: 0px" > 
    <Columns> 
     <asp:CommandField ShowDeleteButton="True" /> 
     <asp:BoundField DataField="Name" HeaderText="Name" /> 
     <asp:BoundField DataField="Length" DataFormatString="{0:N0}" 
      HeaderText="Size in Bytes" HtmlEncode="False" /> 
    </Columns> 
</asp:GridView> 

は、私は、データをバインドする方法を示します。

protected void Page_Load(object sender, EventArgs e) 
{ 
    if (!Page.IsPostBack) 
    { 
     string [] dd = {"FullName"}; 
     FilesGrid.DataKeyNames = dd; 

     string appPath = Request.PhysicalApplicationPath; 
     DirectoryInfo dirInfo = new DirectoryInfo(appPath); 
     FileInfo[] files = dirInfo.GetFiles(); 
     FilesGrid.DataSource = files; 
     FilesGrid.DataBind();   } 
} 
+0

gridview1.rows [index]は何を返しますか?なぜなら、アイテムのSelectedIndexを引っ張って、それを行インデックスとして使用しようとしているからです。私の推測では、SelectedItemがどの行にあるのかを調べ、GridViewRow row =を割り当てる必要があります。 – ginman

+0

グリッドビューにデータを再バインドしてみましたか?すべてのアイテムを失う可能性があります。 – euther

+0

ありがとうございます。私は次のように追加しました:GridViewRow row0 = FilesGrid.Rows [0]; // row = null。結果は同じです。 GridView.SelectedIndex:System.Web.UI.WebControls.GridViewコントロール内の選択した行のインデックスを取得または設定します。 – Kirill

答えて

0

問題と間違って何かかもしれません。ポストバック中に何らかの形でデータソースが失われたようです。この動作は他のユーザーには見られなかったため、全体がViewStateのローカルバグのように見えます。 Tim Schmelterとnaveenに感謝します。

0

Yは、コピーし、あなたのコードを貼り付け、FilesGrid_SelectedIndexChangedにFilesGrid.DataBind()この行を削除し、私はされていることがわかりonselectedindexchanging、onrowdeletingイベントを投稿し、aspxからコメントして、動作しているかどうか、またはそのイベントがトリッキーなことをしていないかどうかを確認してください。あなたのGridViewの行。それは

を動作するかどう

することは、私はこの

protected void Page_Load(object sender, EventArgs e) 
    { 
     if (!Page.IsPostBack) 
     { 
      string[] dd = { "FullName" }; 
      FilesGrid.DataKeyNames = dd; 

      string appPath = Request.PhysicalApplicationPath; 
      DirectoryInfo dirInfo = new DirectoryInfo(appPath); 
      FileInfo[] files = dirInfo.GetFiles(); 
      FilesGrid.DataSource = files; 
      FilesGrid.DataBind(); 
     } 
    } 
    protected void FilesGrid_SelectedIndexChanged(object sender, EventArgs e) 
    { 
     int selected = FilesGrid.SelectedIndex; // selected = 2 
     //FilesGrid.DataBind(); //added after feedback in comments. it makes no change 
     int count = FilesGrid.Rows.Count; // count = 0 
     GridViewRow row = FilesGrid.Rows[selected]; // row = null 
     GridViewRow row0 = FilesGrid.Rows[0]; // row = null 
    } 
    protected void FilesGrid_RowDeleting(object sender, GridViewDeleteEventArgs e) 
    { 

    } 
    protected void FilesGrid_SelectedIndexChanging(object sender, GridViewSelectEventArgs e) 
    { 

    } 

ASPXコードをしたを教えてください。

<asp:ScriptManager ID="ScriptManager1" runat="server" EnableScriptGlobalization="true" 
      AsyncPostBackTimeout="0" EnableScriptLocalization="true"> 
     </asp:ScriptManager> 
     <asp:UpdatePanel ID="upPanel" runat="server"> 
      <ContentTemplate>   
       <asp:GridView ID="FilesGrid" runat="server" AutoGenerateColumns="False" AutoGenerateSelectButton="True" 
        OnRowDeleting="FilesGrid_RowDeleting" OnSelectedIndexChanged="FilesGrid_SelectedIndexChanged" 
        Style="margin-top: 0px" OnSelectedIndexChanging="FilesGrid_SelectedIndexChanging"> 
        <Columns> 
         <asp:CommandField ShowDeleteButton="True" /> 
         <asp:BoundField DataField="Name" HeaderText="Name" /> 
         <asp:BoundField DataField="Length" DataFormatString="{0:N0}" HeaderText="Size in Bytes" 
          HtmlEncode="False" /> 
        </Columns> 
       </asp:GridView> 
      </ContentTemplate>   
     </asp:UpdatePanel> 
+0

あなたはこれらのメソッドを削除する(またはコードビハインドで空を追加した)機械?残念なことに私の場合は違いはありません。私は、Page_Loadのif(!Page.IsPostBack)が何らかの理由で役立つかどうかを解説しています。とにかくあなたの努力に感謝します。 – Kirill

+0

私はコメントを外しました。Postbackのコメントがあれば、それは理由であるはずです –

0

コメントのフィードバックの後にFilesGrid.DataBind(); //を削除してください。それは変更されません 私は私のコードにその文を追加するときにエラーが発生しています。それを取り除いた後、もう一度お試しください。

protected void FilesGrid_SelectedIndexChanging(object sender, GridViewSelectEventArgs e)メソッドのコードを共有してください動作しない場合は、ライン// if (!Page.IsPostBack)をコメントアウトすることで解決して、そのセクション

+0

あなたの答えをありがとう。質問のすぐ下のコメントをお読みください。この問題には別の性質があります。 – Kirill

関連する問題