我有一个使用bindingSource的Infragistics UltraGrid.
如果我在绑定列表中添加一个新对象,它会在网格底部添加一行,如果没有用户定义的排序则可以.
问题是,如果用户单击列标题对网格进行排序,是否有办法让新行以正确的排序顺序显示而不是始终位于底部?
重新排序每个插入的所有行太昂贵.
我有2个类ie CustomerOrder,Customer类有一个订单集合的引用.我使用主细节BindingSources.
我的问题是当我使用延迟加载模式的订单时,我的细节BindingSource没有更新.
UI
BindingSource1.datasource = GetCustomers();
BindingSource2.DataMember = "Orders";
BindingSource2.datasource = BindingsSource1;
Run Code Online (Sandbox Code Playgroud)
所以在我的datagridView1Click事件中
if (customer.orders != null)
{
customer.Orders = LoadOrders();
}
Run Code Online (Sandbox Code Playgroud)
我很感激任何帮助.
我正在Visual Studio 2008 / C#中编写桌面应用程序
我完成了(主要是)编写了一个引擎,该引擎为一家小公司生成了一周的工作计划。课程安排问题的一种形式
现在,我正在设计一种表单,用户可以在其中确定引擎要遵循的初始参数或标准(因为某些设置是可选的)
我有一个名为EngineParameters的类,其中包含所有这些设置。
出于数据绑定的目的,我创建了一个bndEngineParameters类,该类使用getter和setter封装了所有相关字段。
public class bndEngineParameters
{
private engineParameters _parameters;
public bndEngineParameters(engineParameters ep)
{
this._parameters = ep;
}
public bool avoidGrouping
{
get { return _parameters.avoidGrouping; }
set { _parameters.avoidGrouping = value; }
}
public bool avoidWeekends
{
get { return _parameters.avoidWeekends; }
set { _parameters.avoidWeekends = value; }
}
public bool keyFlow
{
get { return _parameters.keyFlow; }
set { _parameters.keyFlow = value; }
}
public bool keyFlowAssistants
{
get { …Run Code Online (Sandbox Code Playgroud) 我有一个TextBox,我在其中放了一个短语,它可以是任务的描述,也可以是任务的id.我想使用此TextBox中的文本过滤列表.但是当我将文本放入此TextBox时,过滤不起作用,并且DataGridView中的集合不会更改.
有什么不对?
public void BindData()
{
var emptyBindingSource = new BindingSource();
dataGridViewTaskList.AutoGenerateColumns = false;
dataGridViewTaskList.DataSource = emptyBindingSource;
var taskList = GetTasks();
_bindingSource = new BindingSource();
_bindingSource.DataSource=taskList.Response;
dataGridViewTaskList.AutoGenerateColumns = false;
dataGridViewTaskList.DataSource = _bindingSource.DataSource;
if (dataGridViewTaskList.Columns["gridViewColumnId"] == null)
dataGridViewTaskList.Columns.Add(new DataGridViewColumn() {Name = "gridViewColumnId"});
else
dataGridViewTaskList.Columns["gridViewColumnId"].DataPropertyName = "Id";
if (dataGridViewTaskList.Columns["gridViewColumnDescription"] == null)
dataGridViewTaskList.Columns.Add(new DataGridViewColumn() {Name = "gridViewColumnDescription"});
else
dataGridViewTaskList.Columns["gridViewColumnDescription"].DataPropertyName = "Description";
}
private void tbSearchedPhraseOrId_TextChanged(object sender, EventArgs e)
{
_bindingSource.Filter = string.Format("Id = '{0}'", tbSearchedPhraseOrId.Text);
}
Run Code Online (Sandbox Code Playgroud)
我在BindData方法中添加了以下内容,它也不起作用:
_bindingSource.Filter = string.Format("Id LIKE '%{0}%'", "23"); …Run Code Online (Sandbox Code Playgroud) 考虑以下代码:
txtLastModifyUserID.DataBindings.Add("Text", c_bsDataSetSource, "LastModifyUserID");
txtLastModifyUserID.Text = "1234";
Run Code Online (Sandbox Code Playgroud)
为什么不能更新源?
我有一个ItemsSource绑定到a 的数据网格CollectionViewSource.
在每列中,我指定Path绑定的属性以获取要显示的特定信息.
如果用户想要更多信息,我想要做的是用一个复选框切换一些列.为此,我需要将visibility属性绑定到复选框的值(使用转换器),但我非常确定列的数据上下文是否干扰绑定.
<DataGrid ItemsSource="{Binding Source={StaticResource cvs}}" ....>
<DataGrid.Columns>
<DataGridTextColumn Header="First Name" Binding="{Binding Path=FirstName}"
Visibility="{Binding IsChecked,
ElementName=IncludeFullHist,
Converter={StaticResource boolItemsConverter}}"/>
</DataGrid.Columns>
</DataGrid>
Run Code Online (Sandbox Code Playgroud)
我也需要我的viewmodel中的复选框,所以我将其IsChecked属性绑定到我的ViewModel上的属性
<CheckBox x:Name="IncludeFullHist" IsChecked="{Binding Path=ManagerFullHist }" />
Run Code Online (Sandbox Code Playgroud)
对于我页面中的其他元素,我已经能够使用以下两种方法中的任何一种来连接可见性绑定,但是当我将它们复制到datagrid时似乎都不起作用:
<TextBlock DockPanel.Dock="Left" Text=" Visible 2 "
Visibility="{Binding Path=DataContext.ManagerFullHist,
RelativeSource={RelativeSource FindAncestor,
AncestorType={x:Type UserControl}},
Converter={StaticResource boolItemsConverter}}"/>
<TextBlock DockPanel.Dock="Left" Text=" Visible 3 "
Visibility="{Binding Path=ManagerFullHist,
Source={StaticResource mainWinResource},
Converter={StaticResource boolItemsConverter}}"/>
Run Code Online (Sandbox Code Playgroud)
关于我可以在datagrid中解决这个问题的方法的任何建议?
如果我省略了任何可能有用的代码,请告诉我.
我正在使用BindingSource.Filter来过滤datagridview上的数据.我使用了以下代码:
BindingSource bs = new BindingSource();
bs.DataSource = datagridview1.DataSource;
bs.Filter = "columnName like '%" + textBox1.Text + "%'";
datagridview1.DataSource = bs;
Run Code Online (Sandbox Code Playgroud)
这段代码有效.但是,当我在双字列上过滤数据时,代码不再起作用.我试着把撇号放在这些词上'column name' like '%" + tbFilter.Text + "%',但这没有用.请帮我找到正确的代码来过滤我列上的数据.
我有一个班,比如说人,有一个Id和一个名字.该类正确实现了INotifyPropertyChanged
另外:有人要求上课人.
我真正的问题是一个更复杂的课程,我把它简化为一个相当简单的POCO,以确定它不是因为我的班级.
本来:
public class Person
{
public int Id {get; set;}
public string Name {get; set;}
}
Run Code Online (Sandbox Code Playgroud)
对于更新,它需要实现INofityChanged.完整的代码就在这个问题的最后
StackOverflow:如何正确实现INotifyPropertyChanged
到现在为止还挺好.如果在单独的线程中更改Person,则会出现问题.
我经常收到带有消息的InvalidOperationException
BindingSource不能是自己的数据源.不要将DataSource和DataMember属性设置为引用BindingSource的值.
我想这与更新是在一个等待的异步任务中完成的事实有关.我知道在更新用户界面项之前,您应该检查InvokeRequired是否相应地采取行动.
private void OnGuiItemChanged()
{
if (this.InvokeRequired)
{
this.Invoke(new MethodInvoker(() => { OnGuiItemChanged(); }));
}
else
{
... // update Gui Item
}
}
Run Code Online (Sandbox Code Playgroud)
但是,使用绑定源时,更改将在bindingsource内处理.所以我无法检查InvokeRequired
那么如何更新也存储在非UI线程中的绑定源中的项目?
按要求:类Person的实现和我的表单的一些代码
class Person : INotifyPropertyChanged
{
public event PropertyChangedEventHandler PropertyChanged;
private int id = 0;
private string name = null;
public int Id …Run Code Online (Sandbox Code Playgroud) 我有这个代码将字典的值分配给组合框:
private void PopulateComboBoxWithSchedulableWeeks()
{
int WEEKS_TO_OFFER_COUNT = 13;
BindingSource bs = new BindingSource();
Dictionary<String, DateTime> schedulableWeeks =
GetWeekBeginningsDict(WEEKS_TO_OFFER_COUNT);
bs.DataSource = schedulableWeeks;
comboBoxWeekToSchedule.DataSource = bs;
comboBoxWeekToSchedule.DisplayMember = "Key";
comboBoxWeekToSchedule.ValueMember = "Value";
}
public static Dictionary<String, DateTime> GetWeekBeginningsDict(int
countOfWeeks)
{
DateTime today = DateTime.Today;
int daysUntilMonday = ((int)DayOfWeek.Monday - (int)today.DayOfWeek + 7)
% 7;
DateTime nextMonday = today.AddDays(daysUntilMonday);
Dictionary<String, DateTime> mondays = new Dictionary<String, DateTime>
();
if (!IsAssemblyOrConventionWeek(nextMonday))
{
mondays.Add(nextMonday.ToLongDateString(), nextMonday);
}
for (int i = 0; i < countOfWeeks; i++) …Run Code Online (Sandbox Code Playgroud) 我试图过滤具有多列的数据视图,其中一些是数值.键入字符串时一切都很完美,但一旦输入数值(如检查信使#),它就会过滤掉.
我的守则如下:
private void tbxSearchCourier_KeyUp(object sender, KeyEventArgs e)
{
string outputInfo = "";
string[] keyWords = tbxSearchCourier.Text.Split(' ');
foreach (string word in keyWords)
{
if (outputInfo.Length == 0)
{
outputInfo = "('Courier #' LIKE '%" + word + "%' OR Name LIKE '%" + word + "%' OR Branch LIKE '%" + word + "%' OR 'Contact Number' LIKE '%" + word
+ "%' OR 'Email Address' LIKE '%" + word + "%')";
}
else
{
outputInfo += …Run Code Online (Sandbox Code Playgroud) bindingsource ×10
c# ×8
winforms ×4
.net ×3
data-binding ×2
.net-3.5 ×1
checkbox ×1
combobox ×1
datagridview ×1
dataview ×1
dictionary ×1
infragistics ×1
itemssource ×1
sorting ×1
textbox ×1
ultrawingrid ×1
wpf ×1
xaml ×1