我正在向绑定到DataGridView的BindingSource添加一个新的Row
source.AddNew();
Run Code Online (Sandbox Code Playgroud)
在此之后,使用BindingSource获取新添加的行,在其排序时返回DataGridView中的下一行.
ROW "A"
ROW "B" <- myBindingSource.AddNew();
ROW "C"
Run Code Online (Sandbox Code Playgroud)
myBindingSource.Current给出ROW"C".(它成为DataGridView中的选定行)
我需要这个,因为我想只更新新添加的行
DataRowView drv = (DataRowView)myBindingSource.Current;
myTableAdapter.Update(drv.Row);
Run Code Online (Sandbox Code Playgroud)
而不是整个表.
myTableAdapter.Update(myDataSet.myTable);
Run Code Online (Sandbox Code Playgroud)
而且,我想在插入后在DataGridView中选择这个新添加的行.
有可能吗?
//从此Admin类获取数据:
public static IQueryable<Student> GetStudents()
{
DojoDBDataContext conn = new DojoDBDataContext();
var query =
from s in conn.Students
join b in conn.Belts on s.BeltID equals b.ID
orderby s.LastName ascending
select s;
return query;
}
Run Code Online (Sandbox Code Playgroud)
//在我的表格上:
BindingSource bs = new BindingSource();
private void fillStudentGrid()
{
bs.DataSource = Admin.GetStudents();
dgViewStudents.DataSource = bs;
dgViewStudents.Columns.Remove("ID");
}
Run Code Online (Sandbox Code Playgroud)
工作完全正常,但我不想删除我不想要的20多列数据,而是只添加我做的几个.此外,获得标题标题的名称是一个奖励.但是,add方法对我不起作用:
private void fillStudentGrid()
{
bs.DataSource = Admin.GetStudents();
dgViewStudents.AutoGenerateColumns = false;
dgViewStudents.DataSource = bs;
dgViewStudents.Columns.Add("ID", "ID Number");
}
Run Code Online (Sandbox Code Playgroud)
我得到适当的行数,列标题设置正确...但行填充空白数据.
我有一个C#Windows窗体项目,其中包含一个包含2个ListBox和一个按钮的Form.在FormLoad上,左侧ListBox填充了一个列表(大约1800个项目),其中包含有关证券(ID和名称)的信息,当用户点击按钮时,所有证券都从左侧列表框移动到右侧.
当我没有使用BindingSources时,即我直接使用ListBoxes的Items属性时,移动过程需要几秒钟:
private void button1_Click(object sender, EventArgs e)
{
while (listBox1.Items.Count > 0)
{
Security s = listBox1.Items[0] as Security;
listBox1.Items.Remove(s);
listBox2.Items.Add(s);
}
}
Run Code Online (Sandbox Code Playgroud)
但是,当我使用BindingSources时,它需要几分钟:
listBox1.DataSource = bindingSource1;
listBox2.DataSource = bindingSource2;
...
private void MainForm_Load(object sender, EventArgs e)
{
ICollection<Security> securities = GetSecurities();
bindingSource1.DataSouce = securities;
}
private void button1_Click(object sender, EventArgs e)
{
while (bindingSource1.Count > 0)
{
bindingSource1.Remove(s);
bindingSource2.Add(s);
}
}
Run Code Online (Sandbox Code Playgroud)
BindingSource方式需要更长时间的原因是什么?有没有办法让它更快?
希望你能帮我这个忙。
我想datagridview通过使用诸如名称之类的特定关键字来过滤我的内容。我使用了一个数据集,然后将其绑定到数据源,然后再绑定到我datagridview的视图中。
当我使用时,bindingsource.filter我无法获得任何结果。
这是我的代码:
Dim ds As New DataSet
Dim bs As New BindingSource
Dim sql As String = "SELECT TOP 10 * FROM dbo.DimCustomer"
Dim connection As New SqlConnection(sqlconnectionstring)
Dim dataadapter As New SqlDataAdapter(sql, connection)
connection.Open()
ds.Clear()
dataadapter.Fill(ds, "Customer")
connection.Close()
bs.DataSource = ds
dgv1.DataSource = bs
dgv1.DataMember = "Customer"
bs.Filter = "FirstName = 'Jon'"
Run Code Online (Sandbox Code Playgroud) 构建BindingSource.Filter串感觉等的丑陋,手册,被迫滤波已经检索到的数据的方式.
ToString()格式化DataSet 设计变更未传播到 FilterFilter从多个控件管理多个条件很快就会变得乏味,容易出错并且难以处理.使用a typedTableAdapter.FillBy(typedDataSet.typedTable, @params ...)是一种强大,简单,直接的方法,用于在数据库和数据库之间进行"过滤" DataSet.
.NET是否在强类型控件DataSet和Form控件之间提供任何强类型过滤(可能通过a BindingSource)?
初始赏金:
最初的赏金是为概念证明而授予的(使用LINQ查询作为DataSource).但是,它没有演示如何实际访问强类型typedTableRow以执行过滤.
额外奖励:
所有铸件通过IList,DataView,DataRowView,DataRow,和typedTableRow已被证明是相当混乱.
Object Generic Watch List Type
------ -------- ------------
myBindingSource.List IList {System.Data.DataView}
myBindingSource.List[0] object {System.Data.DataRowView}
((DataRowView)myBindingSource.List[0]).Row
DataRow typedTableRow
Run Code Online (Sandbox Code Playgroud)
表现出BindingSource与DataSource使用强类型的LINQ查询(即:与typedTableRow字段访问.Where( ... …
我目前正在使用Entity Framework 5开发C#Winforms应用程序。
我的问题是如何对绑定到的项目进行删除(仅将isDeleted字段标记为true)。bindingsourceentity
这是我的表单的屏幕截图:
该DataGridView必然enrollmedsBindingSource。请参阅以下表单加载代码,该代码填充绑定源:
private void EnrollMedicationFrm_Load(object sender, EventArgs e)
{
context.enrollmeds.Where(adm => adm.FK_Admission == _SelectedPKAdm && adm.isDeleted == false).ToList();
enrollmedsBindingSource.DataSource = context.enrollmeds.Local;
}
Run Code Online (Sandbox Code Playgroud)
如您在上面的代码中看到的,我过滤了数据以仅显示isDeleted设置为false 的数据。
以下是我的删除按钮的代码:
private void DeleteBtn_Click(object sender, EventArgs e)
{
if (enrollmedsDataGridView.CurrentRow == null)
{
MessageBox.Show("No item selected.", "System Alert", MessageBoxButtons.OK, MessageBoxIcon.Information);
}
else
{
enrollmedsBindingSource.Remove(enrollmedsBindingSource.Current);
}
}
Run Code Online (Sandbox Code Playgroud)
如果我调用context.SaveChanges();保存按钮,此代码将从数据库中删除该项目。
以下是保存按钮的代码:
private void SaveBtn_Click(object sender, EventArgs e)
{
this.enrollmedsBindingSource.EndEdit();
context.enrollmeds.Local
.Where(a …Run Code Online (Sandbox Code Playgroud) 我想获得BindingSource连接或配置的项目类型.BindingSource.DataSource属性可以设置为对象,列表或类型.如果它是一个Type,它显然还没有绑定项,但我仍然希望得到Type.对于List,我需要项目Type,而不是列表类型.
我目前有一个自定义列表类型用于实现IListItemType接口的业务对象,我创建这个接口是为了解决这个问题.我现在想以更通用的方式使用它,以便它可以用于任何列表.
我已经查看了API文档以获得这样做的好方法,但到目前为止我还没有运气.我错过了什么,或者这只是我不能或不应该做的事情?
我正在使用BindingSource连接到 aDataGridView来过滤显示的数据。
我想知道将过滤结果获取到 GridView 之外的其他东西的最佳方法是什么?
我问这个是因为我想将过滤后的结果用于一些ComboBoxes。现在,我通过由 BindingSource 过滤的 DataTable 来填充这些内容。
简而言之,如何获取过滤的 BindingSource 结果作为 a 之外的其他内容的源DataGridView?
将ObsevableCollection User数据源作为详细信息放置在新表单上,它会创建所有文本框、BindingSource 和 BindingNavigator。这是优秀和快速的。
因为我只需要更新一个用户,所以我删除了 BindingNavigator。但...
这可以不转换列表吗?
class UserDt : Forms {
// Designer partial part
this.userBindingSource.DataSource = typeof(WinFormswithEFSample.User);
private void UserDt_Load
{
_context.Users.Load();
// use this with BindNavigator to navigate ower all users
//this.userBindingSource.DataSource = _context.Users.Local.ToBindingList();
// this doesn't work
//this.userBindingSource.DataSource = _context.Users.Where(p => p.Username == "admin").Local.ToBindingList();
var query = _context.Users.Where(p => p.Username == "admin").ToList();
var binding = new BindingList<User>(query);
this.usersBindingSource.DataSource = binding;
}
}
Run Code Online (Sandbox Code Playgroud) 我从excel表中读取并为BindingList写了这个,在Form_Load中,它被设置为一个数据源作为BindingSource:
bd = new BindingSource(); //instance of BindingSource
bd.DataSource = ExcelOPS.LerExcel(); //LerExcel() method return a BindingList<T>
gvFiltro.DataSource = bd; //set a DataGridView named gvFiltro DataSource property
bindNav.BindingSource = bd; //set a BindingNavigator source
Run Code Online (Sandbox Code Playgroud)
这工作很好!我打算为此 DataGridView gvFiltro 创建一个组合框作为过滤器,因此在组合框的 SelectedIndexChanged 事件中,我尝试这样做:
this.gvFiltro.DataSource = null;
bd.Filter = string.Format("TAG_FAZENDA like '%{0}%'", cbTagFaz.Text);
gvFiltro.DataSource = bd;
gvFiltro.Update();
gvFiltro.Refresh();
bindNav.BindingSource = bd;
bindNav.Update();
bindNav.Refresh();
Run Code Online (Sandbox Code Playgroud)
但是 DataGridView 不会改变。我错过了什么?
bindingsource ×10
c# ×8
winforms ×8
datagridview ×5
.net ×3
vb.net ×2
combobox ×1
filter ×1
linq ×1
listbox ×1