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

نام تاپیک: DataBindings.Add() Problem.

  1. #1
    کاربر دائمی آواتار hdv212
    تاریخ عضویت
    آبان 1384
    محل زندگی
    قم
    پست
    1,727

    Tick DataBindings.Add() Problem.

    سلام
    من یه دیتاگرید ویو دارم که داده ها توش نمایش داده میشن، حالا میخوام روی هر رکوردی که میره اطلاعات اون توی کنترل های مخصوص خودش نمایش داده بشن، منتها نمیدونم چطوری، قبلا اینکار رو با DataRow انجام میدادم، ولی حالا با DataBinding میخوام انجام بدم، فرض کنید یه تابعی دارم که کنترل ها رو بایند میکنه :
    private void BindData()
    {
    this.txt_customerID.DataBindings.Add("Text", this.dt, "customerID");
    this.txt_companyName.DataBindings.Add("Text", this.dt, "companyName");
    this.txt_city.DataBindings.Add("Text", this.dt, "city");
    this.txt_country.DataBindings.Add("Text", this.dt, "country");
    }

    و اینطوری هم فراخوانی میکنم :
    private void dataGridView1_SelectionChanged(object sender, EventArgs e)
    {
    this.BindData();
    }


    منتها در runTime این Exception اتفاق میفته :
    This causes two bindings in the collection to bind to the same property.
    Parameter name: binding


    ممنون میشم راهنماییم کنید، مرسی

  2. #2
    کاربر دائمی آواتار PC2st
    تاریخ عضویت
    آذر 1385
    محل زندگی
    کرمانشاه
    سن
    38
    پست
    1,491
    چون در رویداد SelectionChanged متد BindData برای بیش از یک بار صدا زده میشه، پس در رویدادی مثل Load فرم، متد BindData را فقط یک بار صدا بزنین.

  3. #3
    خوب باید هم خطا بده
    چون هر کنترلی را یکبار بیشتر نمیشه Bind کرد
    یا اینکه همونطور که گفت شد در رویدادی بنویسید که فقط یکبار عمل Bind انجام بگیره مثل load یا در متد Copnstructor بعد از InitializeComponents
    یا اینکه اگر نمی خواین این کار را بکنین قبل از Bind کردن اونا را Clear کنین




    private void BindData()
    {

    this.txt_customerID.DataBindings.Clear();
    this.txt_companyName.DataBindings.Cleare();
    this.txt_city.DataBindings.Clear();
    this.txt_country.DataBindings.Cleare();



    this.txt_customerID.DataBindings.Add("Text", this.dt, "customerID");
    this.txt_companyName.DataBindings.Add("Text", this.dt, "companyName");
    this.txt_city.DataBindings.Add("Text", this.dt, "city");
    this.txt_country.DataBindings.Add("Text", this.dt, "country");


    }



    مجموعه آموزشی Asp.Net Core Mvc کاملا به زبان فارسی(21 ماژول و 15 ساعت فیلم آموزشی همراه با سورس کامل تمرینات و پروژه عملی انجام شده در طول آموزشی)
    مشاهده جزئیات در آدرس http://www.mkiani.ir/blog/content/53084


    وب سایت : http://www.mkiani.ir
    پست الکترونیک : mkiani3000@gmail.com

    موفق و پیروز باشید.
    مهدی کیانی


  4. #4
    کاربر دائمی آواتار hdv212
    تاریخ عضویت
    آبان 1384
    محل زندگی
    قم
    پست
    1,727
    من تابعم رو به صورت زیر اصلاح کردم ولی باز نتیجه نداشت :
    private void BindData()
    {
    this.txt_customerID.DataBindings.Clear();
    this.txt_companyName.DataBindings.Clear();
    this.txt_city.DataBindings.Clear();
    this.txt_country.DataBindings.Clear();

    this.txt_customerID.DataBindings.Add("Text", this.dt, "customerID");
    this.txt_companyName.DataBindings.Add("Text", this.dt, "companyName");
    this.txt_city.DataBindings.Add("Text", this.dt, "city");
    this.txt_country.DataBindings.Add("Text", this.dt, "country");
    }

    من هم در رویداد Load و هم در رویداد dataGridView1_SelectionChanged این تابع رو فراخوانی کردم ولی در زمان اجرا، فقط محتویات رکورد اول رو توی کنترل های نشون میده و وقتی روی رکوردهای بعدی میرم، اطلاعاتش رو نشون نمیده، میشه بگین شما چطوری این کار رو میکنید ؟

  5. #5
    کاربر دائمی آواتار ir_programmer
    تاریخ عضویت
    فروردین 1387
    محل زندگی
    خوزستان، استاني كه سرمايه اش در خدمت استانهاي ديگر است.
    پست
    420
    تابع Bind رو بدون Clear بنویس و فقط در قسمت Load صدا بزن. با تغییر فوکس در گرید ، اطلاعات عوض میشه. در مورد جستجو در گرید میتونی از Find بهره ببری.

  6. #6
    کاربر دائمی آواتار hdv212
    تاریخ عضویت
    آبان 1384
    محل زندگی
    قم
    پست
    1,727
    مشکلم رو پیدا کردم، اینکه چرا فقط محتویات رکورد اول رو نشون میده و روی رکوردهای بعدی عمل نمیکنه، چون در در خط زیر datagridview رو به صورت زیر بایند کردم :
    this.dataGridView1.DataSource = this.dt.DefaultView;

    یعنی از خاصیت DefaultView استفاده کردم، در صورتی که در تابع BindData آبجکت dt رو به صورت زیر آوردم :
    this.txt_customerID.DataBindings.Add("Text", this.dt, "customerID");

    با اصلاح کردن تابع BindData به صورت زیر :
    private void BindData()
    {
    this.txt_customerID.DataBindings.Clear();
    this.txt_companyName.DataBindings.Clear();
    this.txt_city.DataBindings.Clear();
    this.txt_country.DataBindings.Clear();

    this.txt_customerID.DataBindings.Add("Text", this.dt.DefaultView, "customerID");
    this.txt_companyName.DataBindings.Add("Text", this.dt.DefaultView, "companyName");
    this.txt_city.DataBindings.Add("Text", this.dt.DefaultView, "city");
    this.txt_country.DataBindings.Add("Text", this.dt.DefaultView, "country");
    }

    و فراخوانی اون در رویداد load مربوط به فرمم، مشکل حل شد و نیازی به فراخوانی مجدد اون در این رویداد نیست :
    private void dataGridView1_SelectionChanged(object sender, EventArgs e)
    {
    this.BindData();
    }

    اینم یه تجریه بود که شاید شما هم باهاش برخورد نداشتید، به هر صورت از توجهتون ممنون.

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

  1. databindings یک combobox
    نوشته شده توسط shirin_h در بخش C#‎‎
    پاسخ: 12
    آخرین پست: یک شنبه 25 آذر 1386, 07:41 صبح
  2. daynamicproperties و databindings چیست؟
    نوشته شده توسط iran400 در بخش C#‎‎
    پاسخ: 1
    آخرین پست: چهارشنبه 25 مهر 1386, 19:28 عصر
  3. my problem
    نوشته شده توسط iceboy در بخش برنامه نویسی با زبان C و ++C
    پاسخ: 6
    آخرین پست: شنبه 07 آبان 1384, 20:22 عصر
  4. Problem With PHP
    نوشته شده توسط tiger در بخش PHP
    پاسخ: 1
    آخرین پست: پنج شنبه 06 اسفند 1383, 08:07 صبح
  5. A problem in DTS
    نوشته شده توسط faramarz_s در بخش SQL Server
    پاسخ: 7
    آخرین پست: جمعه 06 شهریور 1383, 18:08 عصر

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

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