Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/301.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
c#objectlistview模型更新未绘制_C#_Objectlistview - Fatal编程技术网

c#objectlistview模型更新未绘制

c#objectlistview模型更新未绘制,c#,objectlistview,C#,Objectlistview,我使用(olv)显示依赖于主记录的子属性集。这是一款使用linq的c#应用程序。我不使用olv作为行编辑器;相反,我将底层子记录弹出到一个动态的、更详细的非wpf对话框中。如果olv列的模型特性依赖于对象(即外键),则olv显示不会刷新 比如说, olv显示包含一个状态日志,其中一列是“Status.Code”,它与对象“log”相关,如“log.Status”。因为它是linq,“Log.StatusId”也存在于linq数据上下文中(但未配置为在olv中显示)。“Log.StatusId”从

我使用(olv)显示依赖于主记录的子属性集。这是一款使用linq的c#应用程序。我不使用olv作为行编辑器;相反,我将底层子记录弹出到一个动态的、更详细的非wpf对话框中。如果olv列的模型特性依赖于对象(即外键),则olv显示不会刷新

比如说,

olv显示包含一个状态日志,其中一列是“Status.Code”,它与对象“log”相关,如“log.Status”。因为它是linq,“Log.StatusId”也存在于linq数据上下文中(但未配置为在olv中显示)。“Log.StatusId”从编辑对话框正确返回,“Log.Status”在编辑对话框终止后立即正确填充。此外,linq还可以正确保存编辑

我尝试过olv的Invalidate()和BuildList()以及几天的hoodoo,但都失败了。这是一个普通的olv-不是rapidlistview或datalistview。欢迎任何观点

下面的代码强调了外键的处理。对于非olv用户,olv的配置与大多数其他windows窗体控件一样

...
object old = DataService.Clone<object>(olv.SelectedObject);
  // where old ~ reference base for changes to olv object - for state management and linq
object row = olv.SelectedObject;
  // where row ~ object that receives edits and undergoes updates via linq
Dictionary<string, object> rowState = new Dictionary<string, object>();
  // where ~ rowState<fieldName,originalValue>
RecordDetail dlg = new RecordDetail(GetUser(), master.GetType(), row, rowState);
  // where ~ GetUser() & master.GetType() configure form RecordDetail
DialogResult dr = dlg.ShowDialog();
if (dr == DialogResult.OK)
{
    if (row != null && rowState != null && rowState.Count > 0)
    {
        int id = DataService.GetPrimaryKeyValue(row);
        if (id > 0) /// if not new
        {
            int pk = DataService.GetPrimaryKeyValue(old);
            MultiState state = getChildState(olv); // olv.Tag contains state
            foreach (KeyValuePair<string, object> change in rowState)
            {
                MethodInfo mi = old.GetType().GetMethod(DataService.LINQ_GET + change.Key);
                object newValue = mi.Invoke(row, null);
                bool ok = DataService.ManageMultiStateUpdate(ref state, pk, change.Key, newValue, change.Value, old);
                /// INFO populate fk objects for olv // <== works ok
                Type tdomain = DataService.GetForeignKeyTypeAsAliasSafe(old.GetType(), change.Key);
                if (tdomain != null)
                {
                    object fko = GetForeignKey(tdomain, change.Value);
                    mi = row.GetType().GetMethod(DataService.LINQ_SET + change.Key.Replace(DataService.LI_ID, ""));
                    object[] args = { fko };
                    mi.Invoke(row, args);
                }
                ...
             }
             olv.BuildList(); // <== both this and olv.Invalidate() fail to display foreign key updates
             ...
         }
         ...
     }
     ...
 }
 ...
。。。
object old=DataService.Clone(olv.SelectedObject);
//其中old~ olv对象更改的参考库-用于状态管理和linq
对象行=olv.SelectedObject;
//其中row~通过linq接收编辑并进行更新的对象
字典行状态=新建字典();
//罗维州在哪里
RecordDetail dlg=新的RecordDetail(GetUser(),master.GetType(),row,rowState);
//其中~GetUser()&master.GetType()配置表单RecordDetail
DialogResult dr=dlg.ShowDialog();
if(dr==DialogResult.OK)
{
如果(行!=null&&rowState!=null&&rowState.Count>0)
{
int id=DataService.GetPrimaryKeyValue(行);
如果(id>0)///如果不是新的
{
int pk=DataService.GetPrimaryKeyValue(旧);
多状态状态=getChildState(olv);//olv.Tag包含状态
foreach(rowState中的KeyValuePair更改)
{
MethodInfo mi=old.GetType().GetMethod(DataService.LINQ_GET+change.Key);
object newValue=mi.Invoke(行,空);
bool ok=DataService.managemultisteupdate(参考状态、主键、change.Key、newValue、change.Value、old);
///信息填充olv/的fk对象不起作用。也没有补救措施。我当前唯一的解决方案是清除并重新添加原始对象的编辑列表,并使用hack value id值进行添加。任何数据源绑定/状态都是无关的,因为记录都是未关联的linq对象。耶