Autor Beitrag
rallepralle
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 21



BeitragVerfasst: Di 21.04.09 18:00 
Hi,

Hier mein Anliegen:
Ich möchte ein Anwendung machen, die sich per Icon also in Form von Pictogrammen steuern lässt. Die Piktogramme stehen für verschiedene Anweisungen. Da es aber viele Anweisungen gibt will ich nicht - und kann aus Platzgründen auch nicht - alle anzeigen. Deshalb sollen sie per Suchbefehl vorher ausselektiert werden.

Meine Realisierungsweg (falls jmd. eine bessere Idee hat, würde ich mich riesig freuen; ursprünglich wollte ich das über PictureBoxen in einen weitren Element (als "Umrahmung", also als Aufbewahrungselement für PictureBoxen; Analog wie die ListBox für Texte) machen, die nur die PictureBoxen anzeigt, die ich will per SELECT-Befehl ausgewählt habe. Und wenn die Auswahl zu groß sein sollte, sollte das Element einen Scrollbalken zeigen - ähnlich wie bei einer ListBox, wenn die Texte die Dimensionen der ListBox "sprengen"):
Dieses Ausselektieren der Piktogramme habe ich dadurch realisiert, indem ich eine DataGridView mit einer ImageColumn ausstatte. Die Abfrage nach einer Anweisung erfolgt per SELECT-Befehl.

Theoretisch soll es also so sein das die herausselktierten Anweisung in Form von Piktogrammen in der DataGridViewImagecolumn anzeigt. Jedoch sagt es immer "unzulässiger Pfad". Es kann auch sein, dass es an den Verweis liegt, den ich in der Tabelle gespeichert habe. Denn in der Tabelle, auf dies sich bezieht, habe ich in der Foto-Spalte, die den Wert "text" hat, die Datei-Name der Fotos (also Bild1.JPG, Bild2.JPG, usw.) angegeben. Die Bilder habe ich alle in diesen bin/Debug-Ordner gelegt, wo auch die Datenbank enthalten ist.

Hier also der Code für das Anzeigen von Bildern in einer DataGridView. Ich bedanke mich vielmals für Eure Hilfe. Herzlichen Dank im Voraus. Liebe Grüße.

ausblenden volle Höhe C#-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
34:
35:
36:
37:
38:
39:
40:
41:
42:
43:
44:
45:
46:
47:
48:
49:
50:
51:
52:
53:
54:
55:
56:
57:
58:
59:
60:
61:
62:
63:
64:
65:
66:
67:
68:
69:
70:
71:
72:
73:
74:
75:
76:
77:
78:
79:
80:
81:
82:
83:
84:
85:
86:
87:
88:
89:
90:
91:
92:
93:
94:
95:
96:
97:
98:
99:
100:
101:
102:
103:
104:
105:
106:
107:
108:
109:
110:
111:
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.Data.SqlClient;
using System.IO;

namespace WindowsFormsApplication5
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }

        private DataView dv1 = null;
        private SqlConnection conn;

        private void Form1_Load(object sender, EventArgs e)
        {
            //Datenbank=DB
            conn = new SqlConnection(
                "Data Source=.\\SQLEXPRESS; AttachDbFilename=|Datadirectory|" +
                "\\TEST.mdf; Integrated Security=True; User Instance=True; Timeout= 90");
            // Verbindung zur DB herstgellen

            conn.Open();
            // SQL-Anfrage an die DB RFID-Applikation

            SqlCommand cmd1 = new SqlCommand(
              "SELECT ID, Name, Foto FROM TEST", conn);

            // gespeicherte Prozesse
            SqlDataAdapter da1 = new SqlDataAdapter(cmd1);
            DataTable dt1 = new DataTable();
            da1.Fill(dt1);
            dv1 = new DataView(dt1);

            // Verbindung zur DB trennen
            conn.Close();


            // GridView1 Spalte individuell anzeigen
            dataGridView1.AutoGenerateColumns = false;

            DataGridViewTextBoxColumn ID = new DataGridViewTextBoxColumn();
            DataGridViewTextBoxColumn Name = new DataGridViewTextBoxColumn();
            DataGridViewTextBoxColumn Foto = new DataGridViewTextBoxColumn();

            dataGridView1.Columns.AddRange(new DataGridViewColumn[] { ID, Name, Foto });

            // Spaltenname individuell festlegen
            ID.DataPropertyName = "ID";
            ID.HeaderText = "Nr";
            Name.DataPropertyName = "Name";
            Name.HeaderText = "Prozessname";
            Foto.DataPropertyName = "Foto";
            Foto.HeaderText = "Bild";

              // Daten dem DataGridView 1 übergeben
            dataGridView1.DataSource = dv1;

            bindingSource1.DataSource = dt1;
            textBox1.DataBindings.Add("Text", bindingSource1, "ID");
            textBox2.DataBindings.Add("Text", bindingSource1, "Name");
            textBox3.DataBindings.Add("Text", bindingSource1, "Foto");
            showFoto();
        }

        private void bindingSource1_PositionChanged(object sender, EventArgs e)
        {
            showFoto();
        }

        private void showFoto()
        {
            if (!(pictureBox1.Image == null))
                pictureBox1.Image.Dispose();
            DataRowView drv = (DataRowView)bindingSource1.Current;
            string pfad = drv["Foto"].ToString();
            FileStream fs = new FileStream(pfad, FileMode.Open);
            Bitmap bmp = new Bitmap(fs);
            pictureBox1.Image = bmp;
            fs.Close();
        }

         private void execNQuery(string cmdText)
        {
            SqlCommand cmd = new SqlCommand(cmdText, conn);
            //label4.Text = cmdText;

            try
            {
                conn.Open();
                cmd.ExecuteNonQuery();
            }

            catch (Exception ex)
            {
                MessageBox.Show(ex.Message);
            }

           conn.Close();
        }
    }
}