2016-07-31 17 views
0

私のデータテーブルに問題があります。私のデータテーブルには、自分のデータベースの値が設定されています。新しいファイルをデータベースにアップロードすると、データテーブルが自動的に更新され、更新された内容が表示されます。しかし、今私は持っているdatatableとの相関関係にあるレコードをデータベースから削除するボタンがあります。今の問題は、レコードを削除した後、データテーブルがリフレッシュされず、そこにレコードが残っていることです。レコードが削除されたことを確認しました。そのデータテーブルは更新されませんでした(ページを更新した後にのみ更新されます)。データテーブルが削除後に更新されない

protected void File_Command(object sender, CommandEventArgs e) 
{ 
    string command = e.CommandName; 
    MBFile file; 

    switch (command) 
    { 
     case "ShowPopup": 
      System.Diagnostics.Debug.WriteLine("Running"); 
      long fileid = Convert.ToInt64(e.CommandArgument.ToString()); 
      System.Diagnostics.Debug.WriteLine("FileID: " + fileid); 
      file = MBFile.RetrieveFile(Context.User.Identity.Name, fileid); 
      LblFileID.Text = fileid.ToString(); 
      LblFileName.Text = file.fileName; 
      LblFileType.Text = file.fileType; 
      LblFileSize.Text = file.fileSize.ToString(); 

      ScriptManager.RegisterStartupScript(this, this.GetType(), "myModal", "showPopup();", true); 
      break; 

     case "Delete": 
      System.Diagnostics.Debug.WriteLine("Deleting"); 
      MBFile.DeleteFile(Context.User.Identity.Name, Convert.ToInt64(LblFileID.Text));    
      FillDataFile(); 
      break; 

     case "Download": 
      System.Diagnostics.Debug.WriteLine("Downloading"); 
      DownloadFileContent(Context.User.Identity.Name, Convert.ToInt64(LblFileID.Text)); 
      Page.ClientScript.RegisterStartupScript(Page.GetType(), "Delete Status", "<script language='javascript'>alert('" + "File has been deleted" + "')</script>"); 
      break; 
    } 
} 
+0

レコードが1つしかありませんでしたか? – Steve

+0

DataTable dtFile; (page_loadの上の行)は、FillDataFile()メソッド以外の場所で参照されるものですか? – objectNotFound

答えて

1

インサイドFillDataFileがあるのDataTable

DataTable dtFile;  
protected void Page_Load(object sender, EventArgs e) 
{ 

    if (!IsPostBack) 
    { 
     // Fill up file and folder data on the display 
     FillDataFile();          
    } 
} 

private void FillDataFile() 
{   
    dtFile = new DataTable(); 
    SqlDataReader reader = MBFile.GetFileToDisplay(Context.User.Identity.Name); 
    dtFile.Load(reader); 
    if (dtFile.Rows.Count > 0) 
    { 
     FileTableView.DataSource = dtFile; 
     FileTableView.DataBind(); 
    } 
} 

[削除]ボタンに

<asp:GridView ID="FileTableView" CssClass="datagrid" HeaderStyle-CssClass="datagridHeader" RowStyle-CssClass="datagridRows" runat="server" AutoGenerateColumns="False" DataKeyNames="fileid, filename"> 
    <Columns> 
     <asp:TemplateField HeaderText="Master Folder"> 
      <ItemTemplate> 
       <asp:LinkButton ID="FileLinkButton" CommandName="ShowPopup" OnCommand="File_Command" CommandArgument='<%# Eval("fileid") %>' runat="server" Text='<%# Eval("filename") %>'></asp:LinkButton> 
      </ItemTemplate> 
     </asp:TemplateField> 
    </Columns> 
</asp:GridView> 

充填データ:下のボタン

データテーブル私のコードは、データテーブルのためのもの、および削除しますこの条件

if (dtFile.Rows.Count > 0) 
{ 
    FileTableView.DataSource = dtFile; 
    FileTableView.DataBind(); 
} 

テーブルに存在するレコードを1つだけ削除した場合、この状態はグリッドの再バインドを防止します。いずれにしても、この状態はそれ自体が間違っています。テーブルにレコードがない場合は、とにかく結果をバインドする必要があります。 if条件を削除します。

0

私はきちんとので下記のご質問については得ていないのですが、あなたが削除した後、あなたのグリッドビューのデータ更新をしたい場合は、ちょうどあなたがあなたのDataTableになりたい場合は直後

YourGridView.DataSource = YourDataTable; 
YourGridView.DataBind(); 

を削除し、この行を追加します。私の答え です更新後に更新してからこの行を追加してください

YourDataTable.AcceptChanges(); 
関連する問題