C# Winforms DataGridView с BindingSource не заполняется при запускеC#

Место общения программистов C#
Ответить Пред. темаСлед. тема
Anonymous
 C# Winforms DataGridView с BindingSource не заполняется при запуске

Сообщение Anonymous »

Я пишу приложение C# Winforms, используя шаблон MVVM. Данные хранятся в EF Core.
Цель состоит в том, чтобы показать наборы данных EF Core Entity в объекте DataGridView . Хотя я думаю, что следовал учебнику.

Код: Выделить всё

public class VmSpools : INotifyPropertyChanged, IVmSpools
{
public BindingSource MotherSpools
{
get { return motherSpools; }
set
{
if (motherSpools == value) return;
motherSpools = value;
OnPropertyChanged(nameof(MotherSpools));
}
}
BindingSource motherSpools;

public event PropertyChangedEventHandler? PropertyChanged;

void OnPropertyChanged(string? propName)
{
PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propName));
}

ILifetimeScope compContainer;
public VmSpools(ILifetimeScope compCon)
{
compContainer = compCon;
LoadMotherSpools();
}

private void LoadMotherSpools()
{
using (var ctx = compContainer.Resolve())
{
ctx.MotherSpools.Load();
var ms = new BindingList();
foreach (var m in ctx.MotherSpools)
{
ms.Add(new MotherspoolGridRow(m));
}
MotherSpools = new BindingSource(ms, "MspoolId");
}
}
}
Объект объекта есть для установки DisplayNames для заголовков столбцов.

Код: Выделить всё

public class MotherspoolGridRow : MotherSpool,INotifyPropertyChanged
{
MotherSpool baseObj;

public MotherspoolGridRow(MotherSpool obj)
{
baseObj = obj;
}
[DisplayName("Motherspool ID")]
public new long MspoolId {
get { return baseObj.MspoolId; }
set { if (baseObj.MspoolId == value) return;baseObj.MspoolId = value; OnPropertyChanged(nameof(MspoolId)); }
}

[DisplayName("Created At")]
public new DateTime CreatedAt {
get { return baseObj.CreatedAt; }
set { if (baseObj.CreatedAt == value) return;baseObj.CreatedAt = value; OnPropertyChanged(nameof(CreatedAt)); }
}

[DisplayName("FiberType")]
public new int FiberTypeId {
get { return baseObj.FiberTypeId; }
set { if (baseObj.FiberTypeId == value) return; baseObj.FiberTypeId = value;OnPropertyChanged(nameof(FiberTypeId)); }
}

[DisplayName("Country of Origin")]
public new string CountryOfOrigin {
get { return baseObj.CountryOfOrigin; }
set { if (baseObj.CountryOfOrigin == value) return; baseObj.CountryOfOrigin = value; OnPropertyChanged(nameof(CountryOfOrigin)); }
}

[DisplayName("Original Length")]
public new decimal OriginalLength {
get { return baseObj.OriginalLength; }
set { if (baseObj.OriginalLength == value) return;  baseObj.OriginalLength = value;OnPropertyChanged(nameof(OriginalLength)); }
}

[DisplayName("Remaining Length")]
public new decimal RemainingLength {
get { return baseObj.RemainingLength; }
set { if (baseObj.RemainingLength == value) return; baseObj.RemainingLength = value;OnPropertyChanged(nameof(RemainingLength)); }
}

[DisplayName("Manufacturer SN")]
public new string ManufacturerSn {
get { return baseObj.ManufacturerSn; }
set { if (baseObj.ManufacturerSn == value) return; baseObj.ManufacturerSn = value;OnPropertyChanged(nameof(ManufacturerSn)); }
}

[DisplayName("Decommissioned")]
public new bool Decommissioned {
get { return baseObj.Decommissioned; }
set { if (baseObj.Decommissioned == value) return; baseObj.Decommissioned = value;OnPropertyChanged(nameof(Decommissioned)); }
}

[DisplayName("Owner")]
public new string Owner {
get { return baseObj.Owner; }
set { if (baseObj.Owner == value) return; baseObj.Owner = value; OnPropertyChanged(nameof(Owner)); }
}

[DisplayName("Remarks")]
public new string Remarks {
get { return baseObj.Remarks; }
set { if (baseObj.Remarks == value) return; baseObj.Remarks = value;OnPropertyChanged(nameof(Remarks)); }
}

[DisplayName("Provisioned")]
public new bool? Provisioned {
get { return baseObj.Provisioned; }
set { if (baseObj.Provisioned == value) return; baseObj.Provisioned = value;OnPropertyChanged(nameof(Provisioned)); }
}

public event PropertyChangedEventHandler? PropertyChanged;
void OnPropertyChanged(string? propName)
{
PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propName));
}

}
В моей форме spoolsadminform я просто подключаю привязки к сетке.

Код: Выделить всё

public SpoolAdminForm(IVmSpools vm)
{

vmSpools = vm;
InitializeComponent();
MotherSpoolGrid.DataSource = vm.MotherSpools;
ProductSpoolGrid.DataSource=vm.ProductionSpools;
}
Для полноты: я использую унаследованную DataGridView , чтобы иметь возможность сохранить заказ столбца. Я не думаю, что это связано с проблемой < /p>

Код: Выделить всё

[Description("System.Windows.Forms.DataGridView with save settings")]
[ToolboxBitmap(typeof(System.Windows.Forms.DataGridView))]
public class DataGridViewPersistent : DataGridView
{
protected override void Dispose(bool disposing)
{
SaveDisplaySettings();
base.Dispose(disposing);
}

public delegate void SaveSettingsEventHandler(object sender, string setJson);
public event SaveSettingsEventHandler? SaveSettings;
public void SaveDisplaySettings()
{
List columnOrder = new List();
DataGridViewColumnCollection columns = this.Columns;
for (int i = 0; i < columns.Count; i++)
{
columnOrder.Add(new ColumnOrderItem
{
ColumnIndex = i,
DisplayIndex = columns[i].DisplayIndex,
Visible = columns[i].Visible,
Width = columns[i].Width
});
}
var json = JsonSerializer.Serialize(columnOrder);
SaveSettings?.Invoke(this, json);

//Properties.Settings.Default.dgvJobs = json;
//Properties.Settings.Default.Save();
}

public void LoadDisplaySettings(string settingsJson)
{
try
{
if (settingsJson == null) return;
var json= JsonSerializer.Deserialize(settingsJson);
if (json == null) return;
List columnOrder = json;

if (columnOrder != null)
{
var ordered=columnOrder.OrderBy(i=>i.DisplayIndex);
foreach (var item in ordered)
{
this.Columns[item.ColumnIndex].DisplayIndex = item.DisplayIndex;
this.Columns[item.ColumnIndex].Visible = item.Visible;
this.Columns[item.ColumnIndex].Width = item.Width;
}
}
}
catch { }
}
}

[Serializable]
public sealed class ColumnOrderItem
{
public int DisplayIndex { get; set; }
public int Width { get; set; }
public bool Visible { get; set; }
public int ColumnIndex { get; set; }
}

internal sealed class DataGridViewSetting : ApplicationSettingsBase
{
private static DataGridViewSetting _defaultInstace =
(DataGridViewSetting)ApplicationSettingsBase
.Synchronized(new DataGridViewSetting());
//---------------------------------------------------------------------
public static DataGridViewSetting Default
{
get { return _defaultInstace; }
}
//---------------------------------------------------------------------
// Because there can be more than one DGV in the user-application
// a dictionary is used to save the settings for this DGV.
// As key the name of the control is used.
[UserScopedSetting]
[SettingsSerializeAs(SettingsSerializeAs.Xml)]
[DefaultSettingValue("")]
public Dictionary ColumnOrder
{
get
{
return this["ColumnOrder"] as Dictionary;
}
set { this["ColumnOrder"] = value; }
}
}
При отладке привязый список заполняется правильно (1 запись для тестирования). BindingSource , по -видимому, правильно установлен (например, count = 1).
Когда я выставляю директивный объект BindingList и подключаю его с объектом DataGridView , который он работает. Когда я подключаю BindingSource это не.

Подробнее здесь: https://stackoverflow.com/questions/796 ... at-startup
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение
  • C# Winforms DataGridView с BindingSource не заполняется при запуске
    Anonymous » » в форуме C#
    0 Ответы
    5 Просмотры
    Последнее сообщение Anonymous
  • C# Winforms DataGridView с BindingSource не заполняется при запуске
    Anonymous » » в форуме C#
    0 Ответы
    5 Просмотры
    Последнее сообщение Anonymous
  • C# Winforms DataGridView с BindingSource не заполняется при запуске
    Anonymous » » в форуме C#
    0 Ответы
    4 Просмотры
    Последнее сообщение Anonymous
  • Tkinter: список не заполняется при вызове функции, заполняется из списка
    Anonymous » » в форуме Python
    0 Ответы
    45 Просмотры
    Последнее сообщение Anonymous
  • Имеет ли значение порядок назначения DataSource для BindingSource и назначения DisplayMember для ComboBox в WinForms?
    Anonymous » » в форуме C#
    0 Ответы
    21 Просмотры
    Последнее сообщение Anonymous

Вернуться в «C#»