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

نام تاپیک: به جای متد find در dataview چه راهکاری پیشنهاد می شه

  1. #1
    کاربر دائمی آواتار ایمان اختیاری
    تاریخ عضویت
    خرداد 1387
    محل زندگی
    یه جای ایران عزیز
    سن
    36
    پست
    277

    Question به جای متد find در dataview چه راهکاری پیشنهاد می شه

    سلام عیدتون مبارک
    یه مشکلی برام پیش اومد
    توی یه بانک اطلاعاتی یه فیلد به صورت متن با طول 50 کاراکتر تعریف شده
    اطلاعاتی که توی این فیلد ذخیره می شن طولشون متغییره ..
    حالا توی یه برنامه وقتی یه dataview تعریف کردم و خواستم از متد find اون استفاده کنم به مشکل خوردم .. چون تا اونجایی که فهمیدم متنی که باید جستجو بشه دقیقا باید توی دیتابیس هم تکرار شده باشه یعنی به این صورت نیست که شبیه متن مورد نظر رو از دیتاست بیرون بکشه

    خب دوستان عزیز .. به جای find متد دیگه ای رو می شناسین یا می شه کاریش کرد که فضای خالی فیلد رو در نظر نگیره ؟
    (اینم بگم که با یه کوئری اطلاعات لازم رو توی دیتاست ریختم و می خوام توی اونا جستجو داشته باشم)
    متشکراتم


  2. #2
    کاربر دائمی آواتار mohammad diba
    تاریخ عضویت
    فروردین 1384
    محل زندگی
    تهران
    سن
    38
    پست
    358

    نقل قول: به جای متد find در dataview چه راهکاری پیشنهاد می شه

    سلام دوست عزیز عید شما هم مبارک
    برای متن بهتره از عملگر Like استفاده کنی تا شبیه اون متن رو پیدا کنی

  3. #3

    نقل قول: به جای متد find در dataview چه راهکاری پیشنهاد می شه

    nvarchar نوع ستون توی دیتابیس sql

  4. #4
    کاربر دائمی آواتار sds1920
    تاریخ عضویت
    تیر 1388
    محل زندگی
    اصفهان
    سن
    30
    پست
    483

    نقل قول: به جای متد find در dataview چه راهکاری پیشنهاد می شه

    من فکر نمی کنم دستور Like برای DataGrid وجود داشته باشه.اگه هست نمونه کدش رو بنویسید تا من و بقیه دوستان هم که بلد نیستند یاد بگیرند.تا اونجایی که می دونم Like مربوط به Query می شه.

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

    public int BinarySearch_SubString(ref System.Data.DataSet DS, string TableName, string ColumnSortedName, string item)
    {
    int ColumnIndex = DS.Tables[TableName].Columns[ColumnSortedName].Ordinal;
    int low = 0;
    int high = DS.Tables[TableName].Rows.Count - 1;
    int mid = -1;
    while (low <= high)
    {
    mid = (low + high) / 2;
    string Element = (string)DS.Tables[TableName].Rows[mid].ItemArray[ColumnIndex];
    if (Element.Length > item.Length)
    Element= Element.Substring(0, item.Length);
    if (Element== item)
    return mid;
    if (Element.CompareTo(item) > 0)
    high = mid - 1;
    else
    low = mid + 1;
    }
    return -1;
    }



    امیدوارم کارت رو راه بندازه.

  5. #5
    کاربر دائمی آواتار hakelberfin
    تاریخ عضویت
    اردیبهشت 1388
    محل زندگی
    تبریز
    پست
    137

    نقل قول: به جای متد find در dataview چه راهکاری پیشنهاد می شه

    سلام
    در روش های بالا که مبنای جستجو بر اساس مقایسه بین موجودیت رشته است . فاصله یا space هم جزئی از رشته محسوب میشه. مثلا دو رشته ی Ali B و Ali B مساوی در نظر گرفته نمیشن. باید خودتون تابع یا دستوراتی بنویسید که Space ها رو در رشته حذف کنه مثلا Trim()

    من فکر نمی کنم دستور Like برای DataGrid وجود داشته باشه.اگه هست نمونه کدش رو بنویسید تا من و بقیه دوستان هم که بلد نیستند یاد بگیرند.تا اونجایی که می دونم Like مربوط به Query می شه.
    بله این گفته تقریبا درسته .
    BinarySearch شاید برای جستجوی رشته ها شاید خیلی خوب نباشه . بعضی از توابع درونی .Net که از index گذاری استفاده میکنن سریعتر جواب میدن
    مثلا میتونیم از خاصیت DataTable ، RowFilter ی که میخوایم جدول رو پر کنیم نیز استفاده کنیم


    dataTable.DefaultView.Sort = "LastName";
    dataTable.DefaultView.RowFilter = "LastName LIKE ('" + this.TextBox_LastName.Text.Trim() + "%') ";

  6. #6
    کاربر دائمی آواتار FastCode
    تاریخ عضویت
    تیر 1388
    محل زندگی
    /dev/null
    پست
    3,486

    نقل قول: به جای متد find در dataview چه راهکاری پیشنهاد می شه

            private void LoadData()
    {
    if (!this.m_Dis)
    {
    Tafsily[] t = Tafsily.GetSharedData().FindAll(new Predicate<Tafsily>(this.Match_Tafsily));
    if (t.Length != 0)
    {
    this._MainDataGridView.DataSource = t;
    }
    else
    {
    this._MainDataGridView.DataSource = null;
    }
    }
    }
    private bool Match_Tafsily(Tafsily C)
    {
    if ((C.Moin ?? -1) != Condition_Moin) return false;
    if (!C._Hidden || this.checkBox1.Checked)
    {
    if (this.Condition_T != 0)
    {
    long num = C._Bedehi;
    if (((((num < 10L) || (this.Condition_T != 1)) && ((num > -10L) || (this.Condition_T != 2))) && (((num <= C._Etebar) || (this.Condition_T != 3)) && (((num <= 10L) && (num >= -10L)) || (this.Condition_T != 4)))) && (((num >= 10L) || (num <= -10L)) || (this.Condition_T != 5))) return false;
    }
    if (!((((C._Code >= this.Condition_Code_From) || (this.Condition_Code_From == 0M)) && ((C._Code <= this.Condition_Code_To) || (this.Condition_Code_To == 0M))))) { return false; }
    if ((Condition_Sefaresh) && (!C._HasSefaresh())) return false;
    if ((Condition_Beinerah) && (!C._HasBeinerah())) return false;
    if (!((C._Faaliat == this.Condition_Faaliat) || (this.Condition_Faaliat == -1L))) { return false; }
    long num2;
    long? visitor = C._Visitor; num2 = this.Condition_Visitor; if (!((visitor.HasValue && (visitor.Value == num2)) || (num2 == -1L))) return false;
    long? faaliat = C._Faaliat; num2 = this.Condition_Faaliat; if (!((faaliat.HasValue && (faaliat.Value == num2)) || (num2 == -1L))) return false;
    long? malekiat = C._Malekiat; num2 = this.Condition_Malekiat; if (!((malekiat.HasValue && (malekiat.Value == num2)) || (num2 == -1L))) return false;
    long? mantaghe = C._Mantaghe; num2 = this.Condition_Mantaghe; if (!((mantaghe.HasValue && (mantaghe.Value == num2)) || (num2 == -1L))) return false;
    long? masir = C._Masir; num2 = this.Condition_Masir; if (!((masir.HasValue && (masir.Value == num2)) || (num2 == -1L))) return false;
    if (TextSearchCriteria_Name != null)
    {
    if (!C._Name.Contains(TextSearchCriteria_Name)) return false;
    }
    if (TextSearchCriteria_Address != null)
    {
    if (!C._Address.Contains(TextSearchCriteria_Address)) return false;
    }
    if (TextSearchCriteria_Froshgah != null)
    {
    if (C._Froshgah == null) return false;
    if (!C._Froshgah.Contains(TextSearchCriteria_Froshgah )) return false;
    }
    if (TextSearchCriteria_Tel != null)
    {
    if (C._Tel == null) return false;
    if (!C._Tel.Contains(TextSearchCriteria_Tel)) return false;
    }
    if (TextSearchCriteria_Mobile != null)
    {
    if (C._Mobile == null) return false;
    if (!C._Mobile.Contains(TextSearchCriteria_Mobile)) return false;
    }
    return true;
    }
    return false;
    }

    نظرتون راجع به روش من چیه؟


    (3 سال تجربه + 1 سال طراحی)

  7. #7
    کاربر دائمی آواتار ایمان اختیاری
    تاریخ عضویت
    خرداد 1387
    محل زندگی
    یه جای ایران عزیز
    سن
    36
    پست
    277

    نقل قول: به جای متد find در dataview چه راهکاری پیشنهاد می شه

    از همتون متشکرم ..
    راهکارهای ارائه شده خیلی خوب و جذاب بودن

    مشکل منم با این چند خط کد حل شد

    dv.RowFilter = "id like '859*'";
    dataGridView1.DataBindings.Clear();
    dataGridView1.DataSource = dv;

    که dv اینجا یک dataview هستش که اطلاعات رو از یک dataset گرفته

    متشکرم

    سال خوبی داشته باشد

  8. #8
    کاربر دائمی آواتار teardrop
    تاریخ عضویت
    مهر 1388
    محل زندگی
    همدان
    پست
    139

    Wink نقل قول: به جای متد find در dataview چه راهکاری پیشنهاد می شه

    con.Open();
    strSql = "SELECT * FROM Contacts WHERE TellHome Like '%" + txtFind.Text + "%' OR " +
    "TellMobile1 like '%" + txtFind.Text + "%' OR " + "TellMobile2 like '%" + txtFind.Text + "%' OR " +
    "TellJob like '%" + txtFind.Text + "%'";
    da.SelectCommand.CommandText = strSql;
    da.SelectCommand.ExecuteNonQuery();
    ds.Clear();
    da.Fill(ds, "Contacts");
    con.Close();


    con-->connection
    da-->DataAdaptor
    ds-->Dataset

  9. #9
    کاربر دائمی آواتار FastCode
    تاریخ عضویت
    تیر 1388
    محل زندگی
    /dev/null
    پست
    3,486

    نقل قول: به جای متد find در dataview چه راهکاری پیشنهاد می شه

    con.Open();
    strSql = "SELECT * FROM Contacts WHERE TellHome Like '%" + txtFind.Text + "%' OR " +
    "TellMobile1 like '%" + txtFind.Text + "%' OR " + "TellMobile2 like '%" + txtFind.Text + "%' OR " +
    "TellJob like '%" + txtFind.Text + "%'";
    da.SelectCommand.CommandText = strSql;
    da.SelectCommand.ExecuteNonQuery();
    ds.Clear();
    da.Fill(ds, "Contacts");
    con.Close();
    SqlInjectionUnhandledException up  = new SqlInjectionUnhandledException();
    throw up;

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

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