문제

Hidecolumns라는 DatagridView에서 확장 메소드를 작성했습니다.

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라는 변수로 그리드를 Ironruby 스크립트로 전달합니다.

내 스크립트가 main_grid.hidecolumns ( "FirstName", "lastName") 호출되면 스크립트는 스크립트에 오류가 발생하여 System.Windows.Forms.datagrIdView :: Windows :: Forms :: DataGRIDView의 스크립트에 오류가 발생합니다.

확장 방법은 C#에서 잘 작동하는 것 같습니다. 무엇을 제공합니까?

도움이 되었습니까?

해결책

FWIW, IronRuby 1.1 (Need .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")

또는 DataGridView에서 파생 된 C#에서 새 클래스를 작성하고 메소드를 추가하십시오.

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 Class가 양식 에서이 클래스를 사용하십시오.

JDUNKERYLY의 답변에 대한 의견에서 언급 했으므로 루비 쪽에서 그리드를 확장하는 방법은 다음과 같습니다. 수업을 열고 메소드를 추가하십시오 (루비 쪽에서 만 작동).

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

확장 방법을 직접 사용하라는 제안에 따라, Params 키워드는 Ironruby에 고통 스럽습니다. 인수와 함께 타이핑 된 배열을 구축하고 전달해야합니다. 루비 끈을 루비 어레이로 감을 수는 없습니다. 나는 오늘 일찍 이것을 a 블로그 게시물. 그러나 당신이 그것을 처리 할 수있는 더 부드러운 방법이 있다면, 저에게 알려주십시오.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top