1

私のプログラムでは、ユーザーがレコードを編集したいときに [編集] ボタンを押すと、新しいウィンドウが開き、すべてのフィールドが表示され、レコード情報がそれぞれのフィールドにレンダリングされ、必要なフィールド情報を編集するオプションがユーザーに提供されます。

Web フォーム フィールドにファイル アップロード コントロールを追加しました。しかし、新しいポップアップウィンドウでファイルアップロードコントロールを参照する方法がわかりません..問題を非常に明確に説明しているかどうかはわかりませんが、次のコードを使用して説明しようとします:

protected void GridView1_RowEditing(object sender, GridViewEditEventArgs e)
{
     lblSet.Text = GridView1.Rows[e.NewEditIndex].Cells[2].Text;
     MultiView1.SetActiveView(vRecord);

     btnSave.Visible = false;
     btnBacktoHome.Visible = true;
     //this.lblMedium.Text = GridView1.Rows[e.NewEditIndex].Cells[1].Text;


     using (SqlConnection con = new SqlConnection("Data Source=MEHDI-PC\\SQLEXPRESS;Initial Catalog=PIMS;Integrated Security=True"))
     {
         using (SqlCommand cmd = new SqlCommand())
         {
             String sql = "select [DocumentID],[Ref],[Subject],[Src],[Dst],[Medium],[Date_Printed],[Date_Received],[Document_Type],[Action_Required],[Due_Date],[Actual_Date],[Content],[Tag],[Issue_No],[Attachment],[Notes],[Assigned_To],[Reply_Ref],[Priority],[Status],[Response],[Physical_File_No],[Physical_Rack_Location] from dbo.Documents1 where [DocumentId]=N'" + GridView1.Rows[e.NewEditIndex].Cells[2].Text + "'";
             cmd.Connection = con;
             cmd.CommandText = sql;
             con.Open();

             //SqlDataAdapter da = new SqlDataAdapter(sql,con);
             //DataTable dt = new DataTable();
             DataSet ds = new DataSet();
             using (SqlDataAdapter adp = new SqlDataAdapter(cmd))
             {
                 adp.Fill(ds);
             }


             this.txtRef.Text = ds.Tables[0].Rows[0][1].ToString();
             this.txtSubject.Text = ds.Tables[0].Rows[0][2].ToString();
             this.ddlSource.Text = ds.Tables[0].Rows[0][3].ToString();
             this.ddlDestination.Text = ds.Tables[0].Rows[0][4].ToString();
             this.ddlMedium.Text = ds.Tables[0].Rows[0][5].ToString();
             this.txtDatePrinted.Text = ds.Tables[0].Rows[0][6].ToString();
             this.txtDateReceived.Text = ds.Tables[0].Rows[0][7].ToString();
             this.ddlDocumentType.Text = ds.Tables[0].Rows[0][8].ToString();
             this.cbxAction.Checked = ds.Tables[0].Rows[0][9].Equals(cbxAction.Checked);
             this.txtDueDate.Text = ds.Tables[0].Rows[0][10].ToString();
             this.txtActualDate.Text = ds.Tables[0].Rows[0][11].ToString();
             this.txtContent.Text = ds.Tables[0].Rows[0][12].ToString();
             this.txtTag.Text = ds.Tables[0].Rows[0][13].ToString();
             this.txtIssue.Text = ds.Tables[0].Rows[0][14].ToString();

             //this.fileupload1 = ds.Tables[0].Rows[0][15] ;

             this.txtNotes.Text = ds.Tables[0].Rows[0][16].ToString();
             this.ddlAssignedTo.Text = ds.Tables[0].Rows[0][17].ToString();
             this.txtReplyRef.Text = ds.Tables[0].Rows[0][18].ToString();
             this.ddlPriority.Text = ds.Tables[0].Rows[0][19].ToString();
             this.ddlStatus.Text = ds.Tables[0].Rows[0][20].ToString();
             this.ddlResponse.Text = ds.Tables[0].Rows[0][21].ToString();
             this.txtPhysicalFileNo.Text = ds.Tables[0].Rows[0][22].ToString();
             this.txtPhysicalRackLocation.Text = ds.Tables[0].Rows[0][23].ToString();

             if (con != null)
             {
                 con.Close();
             }
             btnUpdate.Visible = true;
             btnSearch.Visible = false;
             BindGrid();
         }
     }
}

基本的に、ユーザーが編集をクリックすると、コードが実行することは、SQL サーバーで関連するレコードを読み取り、そこから Web フォームの新しいポップアップ ウィンドウにロードすることです。関連するフィールドにすべての情報を配置します。SQL から varbinary データを読み取って Web フォームにバインドすることは、テキスト データを呼び出すほど簡単ではないことをオンラインで読みました。(間違っているかもしれませんが、間違っていたら訂正してください)。SQL Server から Web フォームにデータを取得することについてはあまり心配していません。新しいウィンドウでアップロード コントロールを参照することについて心配しています。私のプログラムは、私のコードの大きな欠陥である新しくアップロードされたファイルを無視します。問題は次のコード行にあります。

//this.fileupload1 = ds.Tables[0].Rows[0][15] ;

他のコードを実行するためにコメントアウトしました。私は丸一週間それで立ち往生しています。どんな助けでも大歓迎です。前もって感謝します。

4

1 に答える 1

0

レコードをファイル アップロード コントロールにバインドすることはできません。このコントロールは、 ダウンロードではなくファイルをアップロードするためのものです。

ファイルのダウンロード方法については、このリンクを参照してください。

ユーザーが既存のファイルを置き換えることを選択した場合、つまりユーザーが新しいファイルをアップロードし、ビジネス ロジックで既存のレコード ID を使用してこのレコードを更新する必要がある場合は、アップロード コントロールを使用して既存のファイルを置き換える必要があります。

あなたの場合、添付ファイルの ID をグリッドの非表示フィールドにバインドし、アップロード コントロールをそのままにしておきます。レコードが更新されたら、ファイル アップロード コントロールにファイルがあるかどうかを確認し、添付ファイルの値を使用して添付ファイルを更新します。

編集ここから、次の行に沿って何かを追加する必要があると思います:

FileUpload file = ((FileUpload)(GridView1.Rows[e.NewEditIndex].FindControl("myFileUploadControl")));

ファイル アップロード コントロールに myFileUploadControl (または必要なもの) の ID を指定する必要があります。

この質問では、グリッドビューでのファイル アップロード コントロールの使用についても説明しています。

于 2013-09-16T09:58:43.063 に答える