1

私は小さなアプリケーションを構築しています。このアプリケーションは、顧客情報と顧客の写真を保存します。ここで、データテーブルからデータグリッドビューにデータを画像で表示したいという問題があります。私のアプリケーションは、画像をデータベースに保存するのではなく、フォルダーに保存します。

したがって、私のデータベースでは、画像パスを保存するだけです。ただし、フルパスではなく、フォルダーまたはファイルの名前のみです。各名前で結合パスを使用します。ルート ディレクトリを変更した方が、フル パスを保持するよりもフォルダを管理しやすくなります。

たとえば、画像ボックスに画像を表示したい場合は、これを行います。

//consider the record has been selected from table

classDirectory cd = new classDirectory();

// it will check current directory combine application name folder and branch name folder.

string branchFolderPath = cd.getBranchFolderPath(branchName); 

string branchPanelPath = cd.getPanelFolderPath(branchFolderPath,panelName);

string customerPath = cd.getCustomerFolderPath(branchPanelPath,customerID + " - " + customerName);

string customerImage = path.Combine(customerPath,customerPicPath);

picCustomer.Image = new Bitmap(customerImage);

結合後、文字列「C:\Users\My Name\Documents\My Application Name\Branch Name\Panel Name\1235 - HIDAYAH\Pictures\HIDAYAH - Picture.jpg」が返されます。

だから写真が見れる。

しかし、グリッドビューでデータを表示する方法がわかりません。

ですから、私が作ったのはここまでです。

Customer.classDataBinding cdb = new Customer.classDataBinding();

DataTable dataCustomer = cdb._listOfCustomer();

dgvCustomer.DataSource = dataCustomer;

this.dgvCustomer.Columns["Customer Image"].Width = 120; //For a while, this code return the string only.
this.dgvCustomer.Columns["Customer ID"].Width = 120;
this.dgvCustomer.Columns["Name"].Width = 120;
this.dgvCustomer.Columns["Branch"].Width = 120;
this.dgvCustomer.Columns["Panel"].Width = 120;

cdb._listOfCustomer()のコード

  public DataTable _listOfCustomer()
    {
        cs.testConnection();

        DataTable dtCustomer = new DataTable();

        using (SqlConnection conn = new SqlConnection(cs.connString))
        {
            string query = "SELECT tbl_customer.customerPicPath as [Customer Image], tbl_customer.customerID as [Customer ID],tbl_customer.customerName as Name, tbl_branch.branchName as Branch, tbl_panel.panelName as Panel FROM (tbl_branch INNER JOIN tbl_panel ON tbl_branch.branchID = tbl_panel.branchID) INNER JOIN tbl_customer ON tbl_panel.panelID = tbl_customer.panelID;";

            using (SqlDataAdapter adap = new SqlDataAdapter(query, conn))
            {
                adap.Fill(dtCustomer);

            }
        }

        return dtCustomer;

なにか提案を?誰かがこの問題を解決するのを手伝ってくれることを願っています。どうもありがとう!

4

1 に答える 1

2

Telerik グリッドを使用していますか? その場合、グリッドをバインドした後、パスを表示する列を非表示にし、GridViewImageColumn を追加し、正しいパスを作成してその値を割り当てることができます。

このアプローチを試してみてください。

UPDATE1: 以下に例を示します。

 public Form1()
    {
        InitializeComponent();

        Random r = new Random();
        DataTable table = new DataTable();
        table.Columns.Add("ID", typeof(int));
        table.Columns.Add("Name", typeof(string));
        table.Columns.Add("ImageName", typeof(string));

        table.Rows.Add(1, "Row 1", "copy.png");
        table.Rows.Add(2, "Row 2", "cut.png");
        table.Rows.Add(3, "Row 3", "folder.png");
        table.Rows.Add(4, "Row 4", "help.png");

        this.radGridView1.DataSource = table;

        radGridView1.Columns["ImageName"].IsVisible = false;

        GridViewImageColumn col = new GridViewImageColumn("Image");
        radGridView1.Columns.Add(col);

        foreach (GridViewRowInfo row in radGridView1.Rows)
        {
            string path = "..\\..\\"; //here you set your path
            row.Cells["Image"].Value = Image.FromFile( Path.Combine(path, row.Cells["ImageName"].Value.ToString()));

        }
    }
于 2012-11-07T12:11:07.393 に答える