标签: bindinglist

重新排序C#中BindingList中的项目?

如何在C#中的BindingList中移动项目?比如说,将最后添加的项目移到前面,或者与之前的项目交换?

c# bindinglist

6
推荐指数
2
解决办法
6010
查看次数

删除列表中的最后一项时,数据绑定上的InvalidOperationException

当我尝试删除datagridview中的最后一项时,我收到以下消息.

DataBinding在列表中找不到适合所有绑定的行.

我的绑定设置如下.

ExtendedBindingList<MyClass> bl = new ExtendedBindingList<MyClass>(GetDataFromDB());
BindingSource bs = new BindingSource();
bs.DataSource = bl;
dgv.DataSource = bs;
Run Code Online (Sandbox Code Playgroud)

ExtendedBindingList只是简单的东西,我把它们放在一起实现排序和过滤以及一些基本的状态持久性.dgv是DataGridView.GetDataFromDB返回MyClass的List.

只有在我尝试使用以下方法从datagridview中删除最后一项时才会出现此问题:

bs.RemoveCurrent();
Run Code Online (Sandbox Code Playgroud)

其他所有时间都有效.我唯一提示解决方案是删除所有绑定并重新应用它们,但这似乎不是一个理想的解决方案.

编辑 只有在BindingList成功删除最后一个项目后才会抛出异常.它被外部代码抛出,所以我无法准确地告诉它究竟是什么抛出它.

所以,我在这里,请求一些帮助:).

提前谢谢,贾斯汀

c# data-binding bindinglist bindingsource winforms

6
推荐指数
1
解决办法
2616
查看次数

为什么我不能将IEnumerable <T>列表转换为BindingList <t>?

是否可以将IEnumerable列表转换为BindingList集合?

IEnumerable列表是类型化对象的列表,例如:

IEnumerable<AccountInfo> accounts = bll.GetAccounts(u.UserName, u.Password);
Run Code Online (Sandbox Code Playgroud)

而我的PagingList只是扩展了BindingList:

public class PagingList<T> 
{
    public BindingList<T> Collection { get; set; }
    public int Count { get; set; }

    public PagingList()
    {
        Collection = new BindingList<T>();
        Count = 0;
    }
}
Run Code Online (Sandbox Code Playgroud)

我只是想将我的IEnumerable列表传递给一个使用我的PagingControl呈现列表的方法:

 protected void RenderListingsRows(PagingList<AccountInfo> list)
   {
     foreach (var item in list)
     {
       //render stuff
     }
   }
Run Code Online (Sandbox Code Playgroud)

但似乎我不能在两者之间施展,任何人都可以指出我错过了什么?!

非常感谢

c# ienumerable bindinglist

6
推荐指数
1
解决办法
7339
查看次数

c#BindingList只读错误

我一直在努力寻找问题的可能原因,但我似乎无法找到它:

错误:

System.NotSupportedException:Collection是只读的.System.ThrowHelper.ThrowNotSupportedException(ExceptionResource资源)位于C:\ Users\aRJiJon\Documents\Visual中WindowsFormsApplication1.Form1.Btn_CSVSEATINGPLAN_Click(Object sender,EventArgs e)的System.Collections.ObjectModel.Collection`1.Add(T item) Studio 2010\Projects\WindowsFormsApplication_1\WindowsFormsApplication1\Form1.cs:第72行

            this.dataGridView1.DefaultCellStyle.Font = new Font("Tahoma", 11);
            bindingCSVSP.DataSource = CSV_Seating_Plan;
            bindingCSVSP.AllowNew = true;

CSV_Seating_Plan.AllowNew = true;
CSV_Seating_Plan.AllowRemove = true;
CSV_Seating_Plan.RaiseListChangedEvents = true;
CSV_Seating_Plan.AllowEdit = true;
this.dataGridView1.DataSource = bindingCSVSP;
this.btn_Process_SP.Enabled = true;
CSV_Seating_Plan.Add(new csv_SeatingPlan());

public string examperiod;
[FieldConverter(ConverterKind.Date, "dd/mm/yyyy")]
public DateTime date_Exam;
public string time;
public string exam_Code;
public string id_Student;
public string name_Student;
public string candidatenum_Student;
public string seat_num;
public string _WSS_EXEC;
public string exam_loc;


#region getsetmethods.
public string EXAMPERIOD
{ get { …
Run Code Online (Sandbox Code Playgroud)

c# bindinglist visual-studio-2010

6
推荐指数
1
解决办法
2086
查看次数

将通用列表转换为BindingList <T>

我有BindingList对象,它与DataGridView一起使用.

BindingList<FilesToProcessDataModels> Listfiles = new BindingList<FilesToProcessDataModels>();
dataGridFiles.DataSource = Listfiles;
Run Code Online (Sandbox Code Playgroud)

我想按照Where中的给定条件过滤项目列表.如下:

dataGridSheets.DataSource = Listfiles.Where(i => i.Status == FileStatus.NotProcessed).ToList();
Run Code Online (Sandbox Code Playgroud)

上面的代码工作正常,但我想将过滤器resut分配给相同类型的对象[Listfiles]而不是datagrid,

当我这样做时:

Listfiles = Listfiles.Where(i => i.Status == FileStatus.NotProcessed).ToList();
Run Code Online (Sandbox Code Playgroud)

它给了以下的erorr

[无法将类型'System.Collections.Generic.List隐式转换为BindingList']

如何将通用列表转换为BindingList<FilesToProcessDataModels>

c# bindinglist generic-list winforms

6
推荐指数
2
解决办法
1万
查看次数

获取Enum <T>值描述

我有我的enumHelper类包含这些:

public static IList<T> GetValues()
{
  IList<T> list = new List<T>();
  foreach (object value in Enum.GetValues(typeof(T)))
  {
    list.Add((T)value);
  }
  return list;
}
Run Code Online (Sandbox Code Playgroud)

public static string Description(Enum value)
{
  Attribute DescAttribute = LMIGHelper.GetAttribute(value, typeof(DescriptionAttribute));
  if (DescAttribute == null)
    return value.ToString();
  else
    return ((DescriptionAttribute)DescAttribute).Description;
}
Run Code Online (Sandbox Code Playgroud)

我的枚举是这样的:

public enum OutputType
{
    File,
    [Description("Data Table")]
    DataTable
}
Run Code Online (Sandbox Code Playgroud)

到现在为止还挺好.所有以前的工作都很好.现在我想添加一个新的帮助器来返回BindingList>,所以我可以将任何枚举链接到任何组合使用

BindingList<KeyValuePair<OutputType, string>> list = Enum<OutputType>.GetBindableList();
cbo.datasource=list;
cbo.DisplayMember="Value";
cbo.ValueMember="Key";
Run Code Online (Sandbox Code Playgroud)

为此,我补充说:

public static BindingList<KeyValuePair<T, string>> GetBindingList()
{
    BindingList<KeyValuePair<T, string>> list = new BindingList<KeyValuePair<T, string>>();
    foreach (T value …
Run Code Online (Sandbox Code Playgroud)

c# generics enums bindinglist

5
推荐指数
2
解决办法
9643
查看次数

如何在将项目添加到C#中的集合之前触发事件?

我想在将项添加到BindingList之前进行一些处理.我看到有一个ListChanged事件,但在添加项目后会触发此事件.只有在调用AddNew方法(而不是Add方法)时才会触发AddingNew事件.以前有人做过这样的事吗?

更新:

我创建了以下类,当在IList上调用Add方法时,我的新Add方法被触发.那么,我是否有其他地方读过的铸造问题?如果我从集合中删除了ISpecialCollection接口,则不会调用我的Add方法.有人可以解释为什么它的行为不同吗?如果我使用ISpecialCollection <接口,是否会出现转换问题?

public interface ISpecialCollection<T> : IList<T>
{
}

public class SpecialCollection<T> : BindingList<T>, ISpecialCollection<T>
{
  public new void Add (T item)  
  {
    base.Add(item);    
  }
}

class Program
{
  static void Main(string[] args)
  {
    IList<ItemType> list = new SpecialCollection<ItemType>();
    list.Add(new ItemType());
  }
}
Run Code Online (Sandbox Code Playgroud)

c# collections events bindinglist

5
推荐指数
1
解决办法
3282
查看次数

使用编程排序绑定到DataGridView的可排序BindingList

我已经在http://msdn.microsoft.com/en-us/library/aa480736.aspx上实现了SortableSearchableList类,并为它添加了一个Sort方法,如下所示:

public void Sort(PropertyDescriptor prop, ListSortDirection direction)
{
ApplySortCore(prop, direction);
}
Run Code Online (Sandbox Code Playgroud)

这个类在通过单击任何列标题对DataGridView进行排序时起作用,但是我需要能够以编程方式调用指定列的Sort方法(在本例中使用sortButton控件).我在网上找到的几个代码示例建议获取列的PropertyDescriptor并将其传递给ApplySortCore方法.我还没有那个工作.我可以获取DataGridView或SortableSearchableList的PropertyDescriptorCollection属性,但似乎无法获取Find方法来获取指定列/成员的PropertyDescriptor.这是我的其余代码:

namespace SortableBindingListTest
{
public partial class Form1 : Form
{
    private SortableSearchableList<Tags> alarms = new SortableSearchableList<Tags>();
    public Form1()
    {
        InitializeComponent();
        alarms.Add(new Tags("some text", "1"));
        alarms.Add(new Tags("more text", "2"));
        alarms.Add(new Tags("another one", "3"));
        dataGridView1.AutoGenerateColumns = false;
        dataGridView1.AllowUserToAddRows = true;
        dataGridView1.EditMode = DataGridViewEditMode.EditOnEnter;
        dataGridView1.RowHeadersVisible = false;
        dataGridView1.AutoSizeColumnsMode = System.Windows.Forms.DataGridViewAutoSizeColumnsMode.Fill;
        DataGridViewTextBoxColumn alarmColumn = new DataGridViewTextBoxColumn();
        alarmColumn.DataPropertyName = "Alarm";
        alarmColumn.Name = "Alarm";
        alarmColumn.HeaderText = "Alarm";
        DataGridViewTextBoxColumn messageColumn = new DataGridViewTextBoxColumn(); …
Run Code Online (Sandbox Code Playgroud)

c# data-binding datagridview bindinglist winforms

5
推荐指数
1
解决办法
1万
查看次数

带按钮控件的DataGridView - 删除行

我想在每行的末尾有一个删除按钮,DataGridView然后单击我要从绑定列表中删除所需的行,该列是我的网格的数据源.

但我似乎无法做到这一点我在产品类中创建了一个按钮对象,并使用唯一的id实例化它以从列表中删除该对象.但是按钮没有显示在行中.

屏幕截图

表单中有TextBox,用户可以输入文本,当他们按下Add按钮时,产品的新对象将使用提供的字段进行实例化,然后将其添加到BindingList.

最后,这个列表被绑定到,DataGridView并且细节显示在网格中.(我已经完成了这一部分).

最后,通过单击"保存"按钮,列表将保存在数据库中.

public class Product{
    public string Brand { get; set; }   
    public int ProductPrice { get; set; }
    public int Quantity { get; set; }

    public product(string brand,int productPrice, int quantity){   
        this.Brand = brand;
        this.ProductPrice = productPrice;
        this.Quantity = quantity;
    }   
}

public partial class MainForm: Form{
    .....
    BindingList<Product> lProd = new BindingList<Product>();
    private void btnAddProduct_Click(object sender, EventArgs e){
        string Brand = txtProBrand.Text;
        int Price = Convert.ToInt32(txtPrice.Text);
        int Quantity = …
Run Code Online (Sandbox Code Playgroud)

.net c# datagridview bindinglist winforms

5
推荐指数
1
解决办法
2万
查看次数

BindingList.Add() 即使有锁也不能跨线程工作

我刚刚学习 C#/.NET,我遇到了这个问题。

所以在我的解决方案中,我有 2 个项目:winforms UI 和带有逻辑的 dll。在 dll 中,我有 BindingList,它为 UI 中的 listBox 提供数据源。

用户界面:

public partial class Form1 : Form
{
    private Class1 _class1;

    public Form1()
    {
        InitializeComponent();
        _class1 = new Class1(); // logic class insatce
        listBox1.DataSource = _class1.BindingList;
    }

    private void button1_Click(object sender, EventArgs e)
    {
        _class1.Add();
    }

    private void button2_Click(object sender, EventArgs e)
    {
         _class1.Remove();
    }
}
Run Code Online (Sandbox Code Playgroud)

逻辑类:

public class Class1
{
    public BindingList<string> BindingList { get; set; } = new BindingList<string>() ;

    public void Add() …
Run Code Online (Sandbox Code Playgroud)

c# multithreading listbox bindinglist winforms

5
推荐指数
1
解决办法
2035
查看次数