نمایش نتایج 1 تا 10 از 10

نام تاپیک: مشکل در datagridview

  1. #1
    کاربر تازه وارد
    تاریخ عضویت
    آبان 1396
    محل زندگی
    همین نزدیکی ها ایران ♥
    پست
    44

    Unhappy مشکل در datagridview

    دوستان در این پروژه بنده با یک آدم گیر و تنبل در افتااااااادم

    ایشون میخوان وقتی بر روی گرید ویو کلیک کردن و با حرکت صفحه کلید بر روی سطرهای جدول عکسی نمایش داده بشه حالا من کدی نوشتم که باید بر روی هر سطر گرید ویو باید کلیک کنه که عکس نشون بده




    پروژه میزارم و کدهای خودم


    private void dataGridView1_CellContentClick(object sender, DataGridViewCellEventArgs e)
    {
    textBox5.Text = dataGridView1.CurrentRow.Cells[3].Value.ToString();


    try
    {
    string s1 = ".jpg";


    textBox7.Text = string.Concat(textBox6.Text, textBox5.Text);


    textBox7.Text = string.Concat(textBox7.Text, s1);
    pictureBox1.Image = Image.FromFile(textBox7.Text);


    pictureBox2.Visible = false;
    }


    catch
    {


    MessageBox.Show("عکس وجود ندارد");




    }


    }




    523.JPG

  2. #2
    کاربر دائمی آواتار ROSTAM2
    تاریخ عضویت
    اسفند 1390
    محل زندگی
    فارس
    پست
    1,677

    نقل قول: مشکل در دیتا گرید ویو

    سلام به رویدادهای datagridview رجوع کنید ی رویداد برای تغییر ردیف داره. اسمشو دقیق یادم نیست. پس خودت بگرد دنبالش.

  3. #3
    کاربر تازه وارد
    تاریخ عضویت
    آبان 1396
    محل زندگی
    همین نزدیکی ها ایران ♥
    پست
    44

    نقل قول: مشکل در دیتا گرید ویو

    نقل قول نوشته شده توسط ROSTAM2 مشاهده تاپیک
    سلام به رویدادهای datagridview رجوع کنید ی رویداد برای تغییر ردیف داره. اسمشو دقیق یادم نیست. پس خودت بگرد دنبالش.

    سلام منم دنبال همون رویدادم

  4. #4

    نقل قول: مشکل در دیتا گرید ویو

    منظورتون رویداد SelectionChanged هست؟

  5. #5
    کاربر تازه وارد
    تاریخ عضویت
    آبان 1396
    محل زندگی
    همین نزدیکی ها ایران ♥
    پست
    44

    نقل قول: مشکل در دیتا گرید ویو

    نقل قول نوشته شده توسط ASHKANLAEI مشاهده تاپیک
    منظورتون رویداد SelectionChanged هست؟
    اره ولی نمیدونم دقیق کدوم رویدادش هست شما میدونید

    سلکشن چنجی من نمیبینم

  6. #6

    نقل قول: مشکل در دیتا گرید ویو

    نقل قول نوشته شده توسط marya0030 مشاهده تاپیک
    اره ولی نمیدونم دقیق کدوم رویدادش هست شما میدونید

    سلکشن چنجی من نمیبینم
    همین رویداد به همین نام در datageidview موجوده: https://docs.microsoft.com/en-us/dot...tframework-4.8

  7. #7
    کاربر تازه وارد
    تاریخ عضویت
    آبان 1396
    محل زندگی
    همین نزدیکی ها ایران ♥
    پست
    44

    نقل قول: مشکل در دیتا گرید ویو

    نقل قول نوشته شده توسط ASHKANLAEI مشاهده تاپیک
    همین رویداد به همین نام در datageidview موجوده: https://docs.microsoft.com/en-us/dot...tframework-4.8

    دوست عزیز من با این رویداد مشکلم حل شد
    کدش میزارم
    البته یک رویدادی هم گذاشتم که کاربر اگ کلیک کرد باز نشون بده


    private void dataGridView1_KeyUp(object sender, KeyEventArgs e)
    {
    textBox5.Text = dataGridView1.CurrentRow.Cells[3].Value.ToString();


    try
    {
    string s1 = ".jpg";


    textBox7.Text = string.Concat(textBox6.Text, textBox5.Text);


    textBox7.Text = string.Concat(textBox7.Text, s1);
    pictureBox1.Image = Image.FromFile(textBox7.Text);


    pictureBox2.Visible = false;
    }


    catch
    {


    MessageBox.Show("عکس وجود ندارد");




    }


  8. #8

    نقل قول: مشکل در دیتا گرید ویو

    دوست عزیز فکر کنم با کد آخری که گذاشتین ارور به وجود بیاد.
    چون در رویداد keyUp نوشتید. پس یعنی اگر هیچ یک از آیتم ها انتخاب نشده بود و شما یک کلید بزنید که باعث انتخاب شدن آیتمی نشه، هنوز آیتم انتخاب شده ای وجود نداره و ارور به وجود میاد.

  9. #9

    نقل قول: مشکل در دیتا گرید ویو

    به درستی اشاره کردن، رخداد SelectionChanged ئه. و البته در اغلب موارد CurrentRow مشخصه مناسب نیست، باید بجاش از dataGridView1.SelectedRows[0] استفاده بشه. CurrentRow آخرین سطری رو مشخص میکنه که عملیاتی رویش انجام شده، مثلا انتخاب شده یا از حالت انتخاب در اومده و ... برای همین ممکنه به سطری اشاره کنه که دیگه در حالت انتخاب شده نیست. به ندرت مواردی پیدا میشه که CurrentRow انتخاب مناسبی باشه.

    در ضمن معمولا در DataGridView یا ListView و ... علاوه بر نمایش داده عملیات هایی مثل حذف و ویرایش و ... هم داریم و نیازه به مقادیر داخل سطر ها رجوع بشه.
    لذا اگر برای داده هاتون یک کلاس یا ساختار (struct) تعریف کرده اید، بهتره که از اشیاء همون کلاس یا ساختار در DataGridView تون استفاده کنید تا مجبور نشید برای دسترسی به تصویر مربوط به فلان سطر با textBox و ... درگیر بشید.
    مثلا فرض کنیم یک کلاس مثل Person داریم که قراره در DataGridView نمایش داده بشه :

    using System.Globalization;
    using System.IO;

    public class Person
    {
    public string FirstName { get; set; }
    public string LastName { get; set; }
    public string PhotoId { get; set; }
    public DateTime Date { get; set; }

    public string PhotoPath => Path.Combine(Environment.CurrentDirectory, "Photos\" + PhotoId + ".jpg");

    public Person(string firstName, string lastName, string photoId, DateTime date)
    {
    FirstName = firstName;
    LastName = lastName;
    PhotoId = photoId;
    Date = date;
    }
    }

    می توانیم برای این کلاس Format تعریف کنیم تا DataGridView بتونه یک شیء از این کلاس رو بصورت های متفاوتی نشون بده :

    using System.Globalization;
    using System.IO;

    public class Person : IFormattable
    {
    public string FirstName { get; set; }
    public string LastName { get; set; }
    public string PhotoId { get; set; }
    public DateTime Date { get; set; }

    public string PhotoPath => Path.Combine(Environment.CurrentDirectory, "Photos\" + PhotoId + ".jpg");

    public Person(string firstName, string lastName, string photoId, DateTime date)
    {
    FirstName = firstName;
    LastName = lastName;
    PhotoId = photoId;
    Date = date;
    }

    public string ToString(string format, IFormatProvider formatProvider)
    {
    switch (format.ToLower())
    {
    case "firstname":
    return FirstName;
    case "lastname":
    return LastName;
    case "photoid":
    return PhotoId;
    case "date":
    var persian = new PersianCalendar();
    return $"{persian.GetYear(Date):0000}/{persian.GetMonth(Date):00}/{persian.GetDayOfMonth(Date):00}";
    default:
    return string.Empty;
    }
    }
    }

    و در هر کدوم از ستون های DataGridView مشخص کنیم که چه فیلدی رو نمایش بده، مثلا lastname برای ستونی که قراره نام خانوادگی رو نشون بده و date برای ستونی که تاریخ رو نشون میده :
    preview1.png
    و موقع درج سطر در DataGridView همه ستون ها همون شیء Person هستند، نه مقدار یک فیلد که بعدا ربط دادنش به شیء داده مون دشوار میشد :

    private void button1_Click(object sender, EventArgs e)
    {
    var persian = new PersianCalendar();
    var item = new Person("محسن", "غلامی", "6106", new DateTime(1380, 11, 8, persian));
    dataGridView1.Rows.Add(item, item, item, item);
    }


    و هر زمان بخواهیم فرضا PhotoPath رو دریافت کنیم، شیء person در همه ستون ها قرار داره :

    private void dataGridView1_SelectionChanged(object sender, EventArgs e)
    {
    if (dataGridView1.SelectedRows.Count == 0)
    {
    return;
    }
    try
    {
    var person = (Person)dataGridView1.SelectedRows[0].Cells[0].Value;
    pictureBox1.BackgroundImageLayout = ImageLayout.Zoom;
    pictureBox1.BackgroundImage = Image.FromFile(person.PhotoPath);
    }
    catch
    {
    pictureBox1.BackgroundImage = null;
    }
    }

  10. #10
    کاربر تازه وارد
    تاریخ عضویت
    آبان 1396
    محل زندگی
    همین نزدیکی ها ایران ♥
    پست
    44

    نقل قول: مشکل در دیتا گرید ویو

    نقل قول نوشته شده توسط the king مشاهده تاپیک
    به درستی اشاره کردن، رخداد SelectionChanged ئه. و البته در اغلب موارد CurrentRow مشخصه مناسب نیست، باید بجاش از dataGridView1.SelectedRows[0] استفاده بشه. CurrentRow آخرین سطری رو مشخص میکنه که عملیاتی رویش انجام شده، مثلا انتخاب شده یا از حالت انتخاب در اومده و ... برای همین ممکنه به سطری اشاره کنه که دیگه در حالت انتخاب شده نیست. به ندرت مواردی پیدا میشه که CurrentRow انتخاب مناسبی باشه.

    در ضمن معمولا در DataGridView یا ListView و ... علاوه بر نمایش داده عملیات هایی مثل حذف و ویرایش و ... هم داریم و نیازه به مقادیر داخل سطر ها رجوع بشه.
    لذا اگر برای داده هاتون یک کلاس یا ساختار (struct) تعریف کرده اید، بهتره که از اشیاء همون کلاس یا ساختار در DataGridView تون استفاده کنید تا مجبور نشید برای دسترسی به تصویر مربوط به فلان سطر با textBox و ... درگیر بشید.
    مثلا فرض کنیم یک کلاس مثل Person داریم که قراره در DataGridView نمایش داده بشه :

    using System.Globalization;
    using System.IO;

    public class Person
    {
    public string FirstName { get; set; }
    public string LastName { get; set; }
    public string PhotoId { get; set; }
    public DateTime Date { get; set; }

    public string PhotoPath => Path.Combine(Environment.CurrentDirectory, "Photos" + PhotoId + ".jpg");

    public Person(string firstName, string lastName, string photoId, DateTime date)
    {
    FirstName = firstName;
    LastName = lastName;
    PhotoId = photoId;
    Date = date;
    }
    }

    می توانیم برای این کلاس Format تعریف کنیم تا DataGridView بتونه یک شیء از این کلاس رو بصورت های متفاوتی نشون بده :

    using System.Globalization;
    using System.IO;

    public class Person : IFormattable
    {
    public string FirstName { get; set; }
    public string LastName { get; set; }
    public string PhotoId { get; set; }
    public DateTime Date { get; set; }

    public string PhotoPath => Path.Combine(Environment.CurrentDirectory, "Photos" + PhotoId + ".jpg");

    public Person(string firstName, string lastName, string photoId, DateTime date)
    {
    FirstName = firstName;
    LastName = lastName;
    PhotoId = photoId;
    Date = date;
    }

    public string ToString(string format, IFormatProvider formatProvider)
    {
    switch (format.ToLower())
    {
    case "firstname":
    return FirstName;
    case "lastname":
    return LastName;
    case "photoid":
    return PhotoId;
    case "date":
    var persian = new PersianCalendar();
    return $"{persian.GetYear(Date):0000}/{persian.GetMonth(Date):00}/{persian.GetDayOfMonth(Date):00}";
    default:
    return string.Empty;
    }
    }
    }

    و در هر کدوم از ستون های DataGridView مشخص کنیم که چه فیلدی رو نمایش بده، مثلا lastname برای ستونی که قراره نام خانوادگی رو نشون بده و date برای ستونی که تاریخ رو نشون میده :
    preview1.png
    و موقع درج سطر در DataGridView همه ستون ها همون شیء Person هستند، نه مقدار یک فیلد که بعدا ربط دادنش به شیء داده مون دشوار میشد :

    private void button1_Click(object sender, EventArgs e)
    {
    var persian = new PersianCalendar();
    var item = new Person("محسن", "غلامی", "6106", new DateTime(1380, 11, 8, persian));
    dataGridView1.Rows.Add(item, item, item, item);
    }


    و هر زمان بخواهیم فرضا PhotoPath رو دریافت کنیم، شیء person در همه ستون ها قرار داره :

    private void dataGridView1_SelectionChanged(object sender, EventArgs e)
    {
    if (dataGridView1.SelectedRows.Count == 0)
    {
    return;
    }
    try
    {
    var person = (Person)dataGridView1.SelectedRows[0].Cells[0].Value;
    pictureBox1.BackgroundImageLayout = ImageLayout.Zoom;
    pictureBox1.BackgroundImage = Image.FromFile(person.PhotoPath);
    }
    catch
    {
    pictureBox1.BackgroundImage = null;
    }
    }

    ممنوووووون سپاس گذارم عالی بودی تو این پروژه بنده به شما خیلی بدهکارم بدون راهنمایی شما مهندس نمی تونستم تمامش کنم

تاپیک های مشابه

  1. پاسخ: 4
    آخرین پست: جمعه 09 آبان 1399, 17:49 عصر
  2. پاسخ: 4
    آخرین پست: پنج شنبه 14 آبان 1394, 23:09 عصر
  3. سوال: کپی کردن کامل یک DataGridView به DataGridView دیگر
    نوشته شده توسط ahangari365 در بخش C#‎‎
    پاسخ: 3
    آخرین پست: دوشنبه 08 اردیبهشت 1393, 18:38 عصر
  4. پاسخ: 8
    آخرین پست: شنبه 21 اردیبهشت 1392, 12:33 عصر
  5. پاسخ: 2
    آخرین پست: پنج شنبه 11 خرداد 1391, 08:32 صبح

برچسب های این تاپیک

قوانین ایجاد تاپیک در تالار

  • شما نمی توانید تاپیک جدید ایجاد کنید
  • شما نمی توانید به تاپیک ها پاسخ دهید
  • شما نمی توانید ضمیمه ارسال کنید
  • شما نمی توانید پاسخ هایتان را ویرایش کنید
  •