wyszukiwanie przy pomocy ListView

0

Hej

Jestem bardzo początkujący i mam problem z listView. Chce zrobić wyszukiwarkę, w której to co będę potrzebował wyświetli się w listView. Załączam to co zrobiłem. Dajcie jakąś wskazówkę bo nie wiem od czego zacząć. Baza jest w sql ce czyli rozszerzenie .sdf

 
{
listView1 view = new listView1()
            SqlCeConnection conn = new SqlCeConnection("Data Source=C:\\Users\\Marek\\Desktop\\dziennik_lekcyjn.sdf");
            {
                conn.Open();
                SqlCeDataAdapter a = new SqlCeDataAdapter("SELECT nr_w_dzienniku, imie_ucznia, nazwisko_ucznia, data_urodzenia_ucznia, pesel_ucznia, adres_zamieszkania_ucznia, adres_korespondencjii_ucznia FROM dane_czuniow WHERE nazwisko_ucznia = '" + this.textBox1.Text + "'", conn);
              
      //jaką tu funkcje wprowadzić?


            }
            conn.Close();
0

możesz dodać np tak:

ListViewItem lvi = new ListViewItem("cos"); //pierwsza kolumna
lvi.Subitems.Add("cos");//2. kolumna
lvi.Subitems.Add("cos");//3. kolumna
lvi.Subitems.Add("cos");//4. kolumna
lvi.Subitems.Add("cos");//5. kolumna
this.listView1.Items.Add(lvi);
0

Hej

Pisałem już raz w sprawie pomocy przy wyszukiwarce listView. Stwierdziłem że dużo łatwiej będzie to zrobić w dataGridView, zrobiłem tą wyszukiwarkę, ale pojawił mi się taki problem. Jeśli wrzucam do dataGridView dwie informacje np: nr_ucznia i nazwisko_ucznia, a chciałbym po kliknięciu na jakąś z tych kolumn żeby wyskoczyły mi dalsze informacje o nim w textBox'ach.

Wyskakuje mi błąd że takiej kolumny nie może odnaleść. Załączam to co zrobiłem.


using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Data.SqlServerCe;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;

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

        }
       
        private void Form1_Load(object sender, EventArgs e)
        {
            DataView view = new DataView();
            SqlCeConnection conn = new SqlCeConnection("Data Source=C:\\Users\\Marek\\Desktop\\Bazauczni.sdf");
            {
                conn.Open();
                SqlCeDataAdapter a = new SqlCeDataAdapter("SELECT nr_ucznia , nazwisko_ucznia FROM uczniowie ", conn);
                {
                    DataTable t = new DataTable();
                    a.Fill(t);
                    dataGridView1.DataSource = view = t.DefaultView;
                }
            }
        }


      private void dataGridView1_CellContentClick(object sender, DataGridViewCellEventArgs e)
      {
          if (e.RowIndex >= 0)
          {
              DataGridViewRow row = this.dataGridView1.Rows[e.RowIndex];

              textBox4.Text = row.Cells["nr_ucznia"].Value.ToString();
              textBox5.Text = row.Cells["nazwisko_ucznia"].Value.ToString();
              textBox6.Text = row.Cells["imie_ucznia"].Value.ToString();
              textBox7.Text = row.Cells["adres_ucznia"].Value.ToString();//to pojawiają się błędy
              textBox8.Text = row.Cells["pesel_ucznia"].Value.ToString();//to pojawiają się błędy
              textBox9.Text = row.Cells["dat_urod_cznia"].Value.ToString();//to pojawiają się błędy


          }


      }




      }

      }
 
0

Noto dobrze Ci pokazuje ponieważ nie widzę w twoim zapytaniu SQL nigdzie "adres_ucznia, pesel_ucznia, dat_urod_cznia, imie_ucznia".

0

Wiem że mam tu wpisane tylko 2 kolumny

 SqlCeDataAdapter a = new SqlCeDataAdapter("SELECT nr_ucznia , nazwisko_ucznia FROM uczniowie ", conn); 

, ale ja chce widzieć tylko te dwie kolumny reszty już nie . A informacje o pozostałych chce żeby mi się pojawiały w textbox'ach.

a możne te kolumny które są nie potrzebne jakoś ukryć lub przysłonić?

0

Na myśl przychodzą mi dwie opcje:

  1. ukryć niepotrzebne kolumny
dataGridView1.Columns[0].Visible = false;
// lub
dataGridView1.Columns["nazwa"].Visible = false;
  1. pobierać w osobnym za pytaniu reszte która jest Ci potrzebna

Skłaniał bym się w Twoim przypadku do bramki numer jeden

0

dzięki już działa świetnie :)

0

Hej

Chciałbym jeszcze dodać coś takiego: po kliknięciu na DataGridView wyskakują mi w textboxach informacje i zdjęcie do tych danych w pictureBox. Niby wszystko działa, ale nie ważne co bym kliknął to w pictureBox pojawia się ciągle jedno i to samo zdjęcie. Gdzie robię źle, co pominąłem? . Wydaje mi się że powinienem zrobić coś na wzór '

textBox10.Text = row.Cells["zdjecie_ucznia"].Value.ToString();

', ale nie wiem jak to przekształcić. Jak dam pictureBox1.Image = row.Cells["zdjecie_ucznia"].Value.ToString();

 to nie ma to żadnego sensu. 


Nadale jest kod co zrobiłem
```csharp
 if (e.RowIndex >= 0)
          {
              DataGridViewRow row = this.dataGridView1.Rows[e.RowIndex];
            
             
   textBox4.Text = row.Cells["nr_ucznia"].Value.ToString();
              textBox5.Text = row.Cells["nazwisko_ucznia"].Value.ToString();
              textBox6.Text = row.Cells["imie_ucznia"].Value.ToString();
              textBox7.Text = row.Cells["adres_ucznia"].Value.ToString();
              textBox8.Text = row.Cells["pesel_ucznia"].Value.ToString();
              textBox9.Text = row.Cells["dat_urod_cznia"].Value.ToString();
             textBox10.Text = row.Cells["zdjecie_ucznia"].Value.ToString();
              
          System.Data.SqlServerCe.SqlCeConnection scon0 = new System.Data.SqlServerCe.SqlCeConnection("Data Source=C:\\Users\\Marek\\Desktop\\Bazauczni.sdf");
          System.Data.SqlServerCe.SqlCeCommand cmd0 = new System.Data.SqlServerCe.SqlCeCommand("SELECT zdjecie_ucznia FROM uczniowie ", scon0);
          scon0.Open();
          cmd0.ExecuteNonQuery();
          byte[] barrImg = (byte[])cmd0.ExecuteScalar();
          string strfn = Convert.ToString(DateTime.Now.ToFileTime());
          System.IO.FileStream fs = new System.IO.FileStream(strfn, System.IO.FileMode.CreateNew, System.IO.FileAccess.Write);
          fs.Write(barrImg, 0, barrImg.Length);
          fs.Flush();
          fs.Close();
          pictureBox1.Image = Image.FromFile(strfn);

          }
0
faraon90 napisał(a):
pictureBox1.Image = row.Cells["zdjecie_ucznia"].Value.ToString();

a co jest w row.Cells["zdjecie_ucznia"] ? Fizycznie bitmapa czy może URI ?

0

Niestety po wpisaniu

 pictureBox1.Image = row.Cells["zdjecie_ucznia"].Value.ToString(); 

wyskoczył mi błąd : Cannot implicitly convert type 'string' to 'System.Drawing.Image'.

Zdjęcia trzymam w formacie byte. Zrobiłem coś takiego:

pictureBox1.Image = row.Cells["zdjecie_ucznia"].Value as byte;

i wyskoczył mi taki błąd : The as operator must be used with a reference type or nullable type ('byte' is a non-nullable value type).

załączam zdjęcie bazy : http://zapodaj.net/d9160287798f1.png.html

0
var data = (Byte[])(row.Cells["zdjecie_ucznia"].Value);
var stream = new MemoryStream(data);
pictureBox1.Image= Image.FromStream(stream);

Spróbuj coś takiego może zadziała. A jak nie to tutaj masz po kolei kroki z msdnu:
http://support.microsoft.com/kb/317701

0

dzięki wielkie, już wszystko rewelacyjnie działa :), jeszcze raz dzięki :D

1 użytkowników online, w tym zalogowanych: 0, gości: 1