Hi!
I'm writing little software just to get some practice in c#. I have listview in form 1 where program displays first name and last name form access database. When admin selects name/surname in listvioew and press show usercard(form2) I have a label in form2 and I want it to display name and surname in that label(as who's card is open). I'va tried different ways (all I could find using google) nothing worked for me (probably I was doing something wrong) I've managed to get that almost working at some point but label was showing name only on click.....I'm neewbe in c# so any help would be great.

Form1 code:

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.OleDb;



namespace Library
{
    public partial class Main : Form
    {
        public Main()
        {
            InitializeComponent();
        }

        private void Form1_Load(object sender, EventArgs e)
        {
            // TODO: This line of code loads data into the 'libraryDataSet.users' table. You can move, or remove it, as needed.
            //this.usersTableAdapter.Fill(this.libraryDataSet.users);

        }

        private void button14_Click(object sender, EventArgs e)
        {

        }

        private void button15_Click(object sender, EventArgs e)
        {

        }

        private void button16_Click(object sender, EventArgs e)
        {

        }

        private void button20_Click(object sender, EventArgs e)
        {

        }

        private void button13_Click(object sender, EventArgs e)
        {

        }

        private void button7_Click(object sender, EventArgs e)
        {

        }

        private void usersBindingNavigatorSaveItem_Click(object sender, EventArgs e)
        {
            this.Validate();
            this.usersBindingSource.EndEdit();
            this.tableAdapterManager.UpdateAll(this.libraryDataSet);

        }

        public void listView1_SelectedIndexChanged(object sender, EventArgs e)
        {



            // this.listView1.Focus();
         // this.listView1.Items[0].Selected = true;

            //edit.textBox1.Text = People[this.listView1.SelectedItems[0].Index].Name;
           // edit.textBox2.Text = People[this.listView1.SelectedItems[0].Index].Age;

        }


        private void listView1_MouseClick(object sender, MouseEventArgs e)
        {
            if (e.Button == System.Windows.Forms.MouseButtons.Left)
            {

            }
        }

   public void button31_Click(object sender, EventArgs e)
        {

                OleDbConnection con = new OleDbConnection();
                con.ConnectionString = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=..\\library.accdb";
                OleDbDataAdapter da = new OleDbDataAdapter("Select * from users", con);
                try
                {
                    con.Open();
                    DataTable dt = new DataTable();
                    DataSet ds = new DataSet();
                    da.Fill(dt);
                    listView1.Items.Clear();
                    foreach (DataRow myRow in dt.Rows)
                    {
                        listView1.Items.Add(myRow["First_Name"].ToString());
                        listView1.Items[listView1.Items.Count - 1].SubItems.Add(myRow["Last_Name"].ToString());
                        GlobalClass.GlobalVar = (myRow["First_Name"].ToString());


                    }

                }
                catch (Exception error)
                {
                    MessageBox.Show(error.ToString());
                }
                finally
                {

                    con.Close();
                }

        }

        private void button39_Click(object sender, EventArgs e)
        {
            this.Close();
        }

        private void button40_Click(object sender, EventArgs e)
        {


            Usercard form = new Usercard() { passMessage = GlobalClass.GlobalVar};

               form.ShowDialog();

        }

     private void button32_Click(object sender, EventArgs e)
        {
            OleDbConnection con = new OleDbConnection();
            con.ConnectionString = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=..\\library.accdb";
            OleDbDataAdapter da = new OleDbDataAdapter("Select * from items", con);
            try
            {
                con.Open();
                DataTable dt = new DataTable();
                DataSet ds = new DataSet();
                da.Fill(dt);

                listView2.Items.Clear();
                foreach (DataRow myRow in dt.Rows)
                {
                    listView2.Items.Add(myRow["carrier"].ToString());
                    listView2.Items[listView2.Items.Count-1].SubItems.Add(myRow["item_name"].ToString());
                    listView2.Items[listView2.Items.Count-1].SubItems.Add(myRow["author"].ToString());
                    listView2.Items[listView2.Items.Count-1].SubItems.Add(myRow["nameste"].ToString());
                }
            }
            catch (Exception error)
            {
                MessageBox.Show(error.ToString());
            }
            finally
            {
                con.Close();
            }
        }

        private void listView2_SelectedIndexChanged(object sender, EventArgs e)
        {

        }

    }
}

Form2 code:

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.OleDb;
namespace Library
{
    public partial class Usercard : Form
    {
        public Usercard()

        {
            InitializeComponent();


        }
        public string passMessage;

        private void Usercard_Load(object sender, EventArgs e)
        {


            OleDbConnection con = new OleDbConnection();
            con.ConnectionString = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=..\\library.accdb";
            OleDbDataAdapter ada = new OleDbDataAdapter("SELECT items.carrier, items.item_name, items.author, Hires.when_hired FROM (Hires INNER JOIN items ON Cstr(Hires.ItemID) = Cstr(items.ItemID)) WHERE Hires.UserID ='2'", con);
            try
            {
                con.Open();
                DataTable dt = new DataTable();
                DataSet ds = new DataSet();
                ada.Fill(dt);
                hired.Items.Clear();
                foreach (DataRow myRow in dt.Rows)
                {
                    hired.Items.Add(myRow["carrier"].ToString());
                    hired.Items[hired.Items.Count - 1].SubItems.Add(myRow["item_name"].ToString());
                    hired.Items[hired.Items.Count - 1].SubItems.Add(myRow["author"].ToString());
                    hired.Items[hired.Items.Count - 1].SubItems.Add(myRow[("when_hired")].ToString());


                }
            }
            catch (Exception error)
            {
                MessageBox.Show(error.ToString());
            }
            finally
            {
                con.Close();
            }


           // TODO: This line of code loads data into the 'libraryDataSet.Hires' table. You can move, or remove it, as needed.
            this.hiresTableAdapter.Fill(this.libraryDataSet.Hires);




        }


        private void listView1_SelectedIndexChanged(object sender, EventArgs e)
        {
           // listview2
        }

        private void button1_Click(object sender, EventArgs e)
        {
            this.Close();
        }

        private void button2_Click(object sender, EventArgs e)
        {
            //obnovitj
        }

        private void label1_Click_1(object sender, EventArgs e)
        {
            //detali poljzovatelja
        }

        private void toolStripContainer1_ContentPanel_Load(object sender, EventArgs e)
        {
            //main window
        }

        private void label2_Click(object sender, EventArgs e)
        {
            //vzjato
        }

        private void label3_Click(object sender, EventArgs e)
        {
           //label
            //MessageBox.Show(passMessage);

        label3.Text = Convert.ToString(passMessage);



        }


}
}

Thanks!

Dani AI

Generated

Brief diagnosis and a slightly more robust pattern.

The symptom came from two common mistakes: (1) a global string was overwritten while populating the ListView, so it always held the last row, and (2) the label text was set from the label's Click handler, so it only changed when clicked. As showed, passing data into the second form via its constructor works—this note shows a safer way to pass the selected user's identity and load that user's data reliably.

Store the user id on each ListViewItem, open Usercard with that id, and let Usercard load its own data (no global variable). Example sketch:

// when filling the ListView
var item = new ListViewItem(firstName);
item.SubItems.Add(lastName);
item.Tag = Convert.ToInt32(myRow["UserID"]);
listView1.Items.Add(item);

// when opening the card
if (listView1.SelectedItems.Count > 0)
{
    int userId = (int)listView1.SelectedItems[0].Tag;
    using (var card = new Usercard(userId)) card.ShowDialog();
}

In the Usercard constructor accept the id, set the label immediately (constructor or Load), and run a parameterized query using that id so the hires list matches the selected user. Also set listView1.FullRowSelect = true; listView1.MultiSelect = false; when building the UI. Use using for DB objects and positional parameters with OleDb (the ? placeholder) to avoid SQL injection and type errors.

This approach removes globals, prevents the “last-row” bug, and keeps data loading local to the form that needs it.

Recommended Answers

All 3 Replies

..Oh and label on form2 always displays the same name despite different choice

Send Value from Form1 to Form2 You can use this code
In Form1

private void btnsendvalue_Click(object sender, EventArgs e)
        {

           Form2 form2 = new Form2(TextBox1.Text +"SurName "+ TextBox2.Text);
            form2.ShowDialog();
        }

and in Form2 use this code

public Form2 (string text)
        {
            InitializeComponent();
            label1.Text = text;
        }

Hope this Help You

Works like charm !!! Thanks a lot!! I was inserting label1.Text=text into public void label3_click {..} .....I'm a nooooooob! Thanks again!

Be a part of the DaniWeb community

We're a friendly, industry-focused community of developers, IT pros, digital marketers, and technology enthusiasts meeting, networking, learning, and sharing knowledge.