0

以下のマークアップを含む詳細ビューがあり、この詳細ビューのデータ ソースは、以下のようなストアド プロシージャ「spDocResult」からのものです。

select DocId,TransId,FileId,Filename,ContentType,Data,DocumentNo,Title,TRANSMITTAL
from DocumentSum2
where (DocId=@Docid)AND(Transid=@Transid)

この詳細ビューの 1 つのフィールドは、Efile 名を表示する必要があるため、そのための 1 つのユーザー コントロールを作成しました。

public partial class FileTemp : System.Web.UI.UserControl
{
    private EDMSDataContext _DataContext;
private IEnumerable<tblFile> _Efiles;

public IEnumerable<tblFile> Efiles
{
    set { _Efiles = value; }
}
protected void Page_Load(object sender, EventArgs e)
{ 
}
    protected void LinkButton1_Command(object sender, CommandEventArgs e)
{
    if (e.CommandName == "Download")
    {
         _DataContext = new EDMSDataContext();
        //you can get your command argument values as follows
        string FileId = e.CommandArgument.ToString();
       int _FileId = Convert.ToInt32(FileId);
       tblFile Efile = (from ef in _DataContext.tblFiles
                    where ef.FileId == _FileId
                    select ef).Single();
       if (Efile != null)
       {

           download(Efile);

       }}}

        private void download ( tblFile Efile)

{

Byte[] bytes = (Byte[])Efile.Data.ToArray();
Response.Clear();

Response.Buffer = true;

Response.Charset = "";

Response.Cache.SetCacheability(HttpCacheability.NoCache);

Response.ContentType = Efile.ContentType.ToString();

Response.AddHeader("content-disposition", "attachment;filename="

+ Efile.FileName.ToString());

Response.BinaryWrite(bytes);

Response.Flush();

Response.End();

}

public override void DataBind()
        {
            base.DataBind();
            GridViewEfile.DataSource = _Efiles;
            GridViewEfile.DataBind();

        }

}

detailview のデータソースがストアド プロシージャに由来し、ユーザー コントロールのプロパティが tblFile に由来するため、問題が発生しました。そのため、DetailsView1_DataBound を使用すると、ユーザー コントロールのプロパティを取得する方法がわかりません。以下のコードを使用すると、エラーが発生します。

can not implicity convert type string to system.collection.generic.iEnumerable<tblfile>

この行にエラーがあります

fileList.Efiles = docresult.Filename;

protected void DetailsView1_DataBound(object sender, EventArgs e)
{

    spDocResultResult docresult = (spDocResultResult)DetailsView1.DataItem;
    FileTemp fileList = (FileTemp)DetailsView1.FindControl("FileTemp1");

    fileList.Efiles = docresult.Filename;
    fileList.DataBind();
}
4

1 に答える 1

1

これは、データ バインディングの問題ではない可能性があります。文脈から集めるのは少し難しいですが...

FileTemp fileList = (FileTemp)DetailsView1.FindControl("FileTemp1");    
fileList.Efiles = docresult.Filename;

fileList.Efiles は、ファイル名を割り当てたい項目のリストですか? もしそうなら、あなたはそれらを通してforeachする必要があるかもしれません.

foreach (var file in fileList.Efiles)
{
    file.FileName = docresult.Filename;
}

また、この行を Efiles 宣言に追加して、Get アクセサー エラーを解決します。

public IEnumerable<tblFile> Efiles
{
    get { return _Efiles; } // <- here
    set { _Efiles = value; }
}
于 2012-11-16T16:46:20.977 に答える