2011-06-30 11 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參數被確定)。

任何人都可以解釋它有可能嗎?

預先感謝您。

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

你有沒有嘗試將你的數據重新綁定到你的GridView?可能會失去所有的物品。 – euther

+0

謝謝你的迴應。我剛剛添加了以下內容:GridViewRow row0 = FilesGrid.Rows [0]; // row = null。結果是一樣的。其實文檔說GridView.SelectedIndex:獲取或設置System.Web.UI.WebControls.GridView控件中所選行的索引。 – Kirill

回答

0

問題被註釋掉線// if (!Page.IsPostBack)解決。看起來數據源在回發期間以某種方式丟失。整體看起來是ViewState的一個本地bug,因爲這種行爲沒有被其他用戶觀察到。我特別感謝Tim Schmelter和naveen。

0

Y複製粘貼代碼,刪除FilesGrid_SelectedIndexChanged此行FilesGrid.DataBind(),我看到有2你沒有發佈的方法,這些方法不在你發佈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

你的意思是說,刪除(或在codebehind後添加空白)這些方法的代碼適用於機?不幸的是,我沒有區別。我發現在Page_Load中的「if(!Page.IsPostBack)」這一行註釋有助於某種原因。無論如何謝謝你的努力。 – Kirill

+0

我已將它取消註釋,並且是的,如果您有Postback評論,則應該是原因 –

0

刪除FilesGrid.DataBind(); //在反饋意見後添加註釋。它沒有改變 當我將該語句添加到我的代碼時,我收到錯誤。刪除後請重試。如果不工作,請分享

protected void FilesGrid_SelectedIndexChanging(object sender, GridViewSelectEventArgs e)方法的代碼,可能是有點不妥部分

+0

謝謝您的回答。請閱讀問題下面的評論。這個問題有另一個性質。 – Kirill