6

データベース内のテーブルには、写真、ドキュメント、DLL ハリヤードなどが格納されています。ユーザーに対してこれらすべてのマッピングを実装するにはどうすればよいですか? これらのデータをデータ テーブルにバインドし、各セルにハイパーリンクを設定したいと考えています。ハイパーリンクをクリックすると、データベースから対応する項目が呼び出されます。

OracleCommand oracleCom = new OracleCommand();
oracleCom.Connection = oraConnect;
oracleCom.CommandText = "Select * From " + Session["tableNameIns"];
OracleDataAdapter adapter = new Oraenter code herecleDataAdapter();
DataTable tableD = new DataTable();
tableD.Locale = System.Globalization.CultureInfo.InvariantCulture;
adapter.SelectCommand = oracleCom;
adapter.Fill(tableD);
changeTableAtributs(tableD);
tableResults.DataSource = tableD.AsDataView();
tableResults.DataBind();

DB の次の属性: i_id(number)、i_objecttype_id(number)、s_code(nvarchar)、s_name(nvarchar)、m_content(blob)、m_description(nvarchar) dbview

クライアントでは、次のように表示されます: i_id(number)、i_objecttype_id(number)、s_code(nvarchar)、s_name(nvarchar)、m_description(nvarchar)。m_content 属性なし。 クライアントビュー

4

6 に答える 6

1

あなたの質問は「不完全」のようです。ブロブが画像の場合、その画像を表示したいですか? ブロブが dll の場合はどうなりますか?

データベースでは、M_CONTENT フィールドは blob であるため、それを GridView にデータバインドすると、GridView はそのフィールドの内容を知る方法がありません。

BLOB 内のファイルの種類を示す画像を表示する場合は、その種類を知る必要があります。タイプをデータベースに保存するか (Optimal)、実行時に BLOB を解析してファイル タイプを特定します。

あなたはすでにタイプ(I_OBJECTTYPE_ID)を持っているようです。その場合は、asp:GridView/Columns の下に列を定義できます。

<asp:TemplateField HeaderText="File type">
    <ItemTemplate>
        <asp:Image runat="server" ID="mediaImage"
            ImageUrl='<%# GetImageUrl(Eval("type") as string) %>' />
    </ItemTemplate>
</asp:TemplateField>

あなたの場合、タイプ列は I_OBJECTTYPE_ID と呼ばれます。GetImageUrl は分離コードの関数です。

switch (type)
{
    case "video":
        return "~//Images//video.png";
    case "audio":
        return "~//Images//audio.png";
}
return ""; // Something is wrong

この手法を使用すると、ItemTemplate マークアップの下にハイパーリンクやその他のものを作成できます。

于 2012-12-06T22:26:50.400 に答える
0

各行にグリッド ボタンを作成し、選択または削除または更新ボタンを使用します。

e.selectedindex.

いつでもヘッダーを変更したり、ヘッダーを非表示にしたりできます。

また、selectedindexchanged などのイベントを使用することもできます。選択すると、選択したインデックス ID を取得し、それを使用してメソッドを呼び出すことができます。

于 2013-01-05T18:01:38.490 に答える
0

ユーザーがファイルを表示する代わりにダウンロードできるようにする場合は (dll がブラウザーに表示される可能性があるため)、次のようにします。

  1. 新しいページを作成しますdownloadfile.aspx
  2. イベントではdatarowbound、ファイルタイプ、ファイル名などのファイルをダウンロードするために必要な値を解析します。abc.pdfblob として保存したとします。ハイパーリンクの URL は次のようになりdownloadfile.aspx?fname=abc.pdf&type=application&pkey=uniqueidentificationます。
  3. ロード イベントでは、ベースdownloadfile.aspxとして BLOB を取得します(つまり、主キー)。それをストリームに変換し、この質問のように応答します。byte[]uniqueidentification
于 2012-12-27T12:05:21.043 に答える
0

GridView の RowDataBound イベントでこれらの値を取得し、リンク/ハイパーリンクを作成して行に割り当てることができます。

    protected void tableResults_RowDataBound(object sender, GridViewRowEventArgs e)
    {
        if (e.Row.RowType == DataControlRowType.DataRow)
        {
            DataRowView row = e.Row.DataItem as DataRowView;

            if (row != null)
            {
                Label lbImagePath = e.Row.FindControl("lbImagePath") as Label;
                lbImagePath.Text = row["ImagePathColumn"].ToString();
            }
        }
    }

あなたの場合、そのラベルを HyperLink コントロールに変更し、その URL を列の値に設定します

于 2012-11-29T22:22:00.990 に答える
0

これを実現するには、TemplateFieldを使用する必要があります。各セルにコントロールを挿入し、 Eval関数を使用してデータをバインドします。詳細については、このリンクを参照してください

于 2013-01-02T07:09:09.453 に答える