我编写了一个实现RewriteCond %{THE_REQUEST} \ /+(?!(en|fr|es|de)/).*
RewriteRule ^(.*)$ /en/$1 [R,L]
接口的类IBindingListView
。
BindableList<T> : IBindingListView
由于某些原因_abilityList = new BindableList<Ability>();
dataGridViewAbility.AutoGenerateColumns = true;
dataGridViewAbility.DataSource = _abilityList;
没有生成列,因此当我向DataGridView
添加数据时,BindableList<T>
会抛出一个错误,指出我需要先添加列。
这让我觉得奇怪的是,如果我向我的DataGridView
添加一个对象,那么只会生成列。我还为BindableList<T>
更改了我的课程,不添加任何内容,列生成就好了。
我不知道为什么BindingList<T>
在我的通用绑定列表为空时不会生成列。框架知道程序构建时泛型的类型。
更新:
能力等级
DataGridView
我不明白为什么人们无法理解这一点,但我已经制作了一个新的Winform应用程序仍然存在同样的问题。
class Ability
{
public Int32 ID { get; set; }
public Int32 Generation { get; set; }
public String Name { get; set; }
public String Effect { get; set; }
}
OnListChanged事件
private BindableList<Ability> _abilityList;
public Form1()
{
InitializeComponent();
_abilityList = new BindableList<Ability>();
Button b = new Button();
b.Location = new Point(0, 0);
b.Click += new EventHandler(buttonGetData_Click);
this.Controls.Add(b);
DataGridView _grid = new DataGridView();
_grid.Location = new Point(100, 0);
_grid.AutoGenerateColumns = true;
_grid.DataSource = _abilityList;
this.Controls.Add(_grid);
}
private void buttonGetData_Click(object sender, EventArgs e)
{
_abilityList.Add(new Ability());
}
当行protected virtual void OnListChanged(ListChangedEventArgs e)
{
if (ListChanged != null)
{
ListChanged(this, e);
}
}
运行时,会触发_abilityList.Add
。这将运行并且DataGridView将抛出并将Error,No Columns添加到View。如果我先将ListChanged(this, e);
添加到BindableList<T>
,然后再将其分配为DataSource
列将生成。
答案 0 :(得分:1)
简单地分配DataGridView.DataSource
属性不会立即生成列。根据我的经验,如果您需要立即DataGridViewColumns
,那么有4条关键代码行可以强制创建列:
DataGridView dgv = new DataGridView() { Dock = DockStyle.Fill };
BindingList<Ability> list = new BindingList<Ability>();
dgv.AutoGenerateColumns = true;
dgv.DataSource = list;
int colCount = dgv.Columns.Count; // 0
//--------
// force columns to be created
using (var g = dgv.CreateGraphics()) {}
using (var f = new Form()) {
f.Controls.Add(dgv);
f.Controls.Remove(dgv);
}
//--------
int colCount2 = dgv.Columns.Count; // 4
修改:更快的替代方法,尤其是当DataGridViewColumns
(例如AutoSizeMode
和SortMode
)上的属性需要设置时。
public static void Refresh(DataGridView view, DataTable table) {
bool origAuto = view.AutoGenerateColumns;
view.AutoGenerateColumns = true;
view.DataSource = table;
view.BindingContext = new BindingContext();
view.AutoGenerateColumns = origAuto;
}