سؤال

لقد كتبت طريقة تمديد قبالة DataGridView تسمى HIDECOLUMENS.

public static class Extensions
{
    public static void HideColumns(this DataGridView dataGridView, params string[] columnNames)
    {
        foreach (string str in columnNames)
        {
            if (dataGridView.Columns[str] != null)
            {
                dataGridView.Columns[str].Visible = false;
            }
        }
    }

}

اجتاز الشبكة الخاصة بي إلى برنامج نصي للميكروبري كمتغير يسمى Main_Grid

عندما يستدعي البرنامج النصي الخاص بي main_grid.hidecolumns ("الاسم الأول"، "اسم العائلة") ينفث البرنامج النصي مع الخطأ في طريقة غير محددة في البرنامج النصي "HIDECOLUMS" ل System.windows.forms.datagridview: System :: Windows :: Forms :: DataGridView

يبدو أن طرق التمديد تعمل بخير من C #. ما يعطي؟

هل كانت مفيدة؟

المحلول

FWIW، IronRuby 1.1 (الاحتياجات .NET 4) يوفر using_clr_extensions الطريقة - كما لوحظ في الإصدار ملاحظات تطبق جميع أساليب الإرشاد المحددة على الفئات المعرفة في مساحة اسم معينة، بغض النظر عن الجمعية المعروفة؛ ستظهر التجميعات المحملة في المستقبل التي تحدد أساليب الإرشاد في مساحة الاسم المنشط تلقائيا على الأنواع الصحيحة، مثل هذا:

load_assembly "System.Core"
using_clr_extensions System::Linq

# ...

products.
  where(lambda { |p| p.units_in_stock == 0 }).
  each { |x| puts x.product_name }

تشير ملاحظات الإصدار أيضا إلى مجموعة كاملة من الأمثلة في http://github.com/ironruby/ironruby/blob/master/languages/ruby/samples/linq/101samples.rb.

نصائح أخرى

طريقة التمديد هي مجرد سكر تركلي، ستحتاج إلى الاتصال به على النحو التالي:

Extensions.HideColumns(main_grid, "FirstName", "LastName")

بدلا من إنشاء فئة جديدة في C # التي تستمد من DataGridView وإضافة الطريقة:

public class DataGridViewExt : DataGridView  
{
    public void HideColumns(params string[] columnNames)
    {
        foreach (string str in columnNames)
        {
            if (this.Columns[str] != null)
            {
                this.Columns[str].Visible = false;
            }
        }
    }        
}

واستخدام هذا الفصل بدلا من System.windows.forms فئة على النموذج الخاص بك.

منذ أن ذكرت ذلك في التعليقات على إجابة JDunkeryly، إليك كيف يمكنك تمديد الشبكة من جانب روبي. فقط افتح الفصل وإضافة طريقة (يعمل فقط من الجانب الروبي).

class System::Windows::Forms::DataGridView
  def hide_columns(*columnNames)
    column_names.each do |cn|
      self.columns[cn].visible = false
    end
  end
end

فيما يتعلق بالاقتراح لاستخدام طريقة التمديد مباشرة، فإن Params Keyword هي مؤلمة لطي الملابس. تحتاج إلى إنشاء مجموعة مكتوبة مع حججك وتمريرها. لا يمكنك فقط لف سلاسل روبيك في صفيف روبي. لقد سحبت هذا في وقت سابق اليوم في مشاركة مدونة. وبعد ولكن إذا كان لديك طريقة أكثر سلاسة للتعامل مع ذلك، فيرجى إخبارنا بذلك.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top