[转]DevExpress.XtraGrid.GridControl gridView自动列宽代码

本文介绍了一种在 GridView 中自动调整列宽的方法,通过设置 ColumnAutoWidth 为 false 并使用 BestFitColumns() 方法来实现列宽的最佳匹配。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

gridView1.OptionsView.ColumnAutoWidth = false;

 
for (int I = 0; I < gridView1.Columns.Count; I++)
{
this.gridView1.BestFitColumns();
this.gridView1.Columns[I].BestFit();//自动列宽
}
 
 
转:http://www.cnblogs.com/zeroone/p/4870045.html

转载于:https://www.cnblogs.com/lzh_527/p/5782507.html

System.NotSupportedException HResult=0x80131515 Message=此方法显式使用的 CAS 策略已被 .NET Framework 弃用。若要出于兼容性原因而启用 CAS 策略,请使用 NetFx40_LegacySecurityPolicy 配置开关。有关详细信息,请参见 http://go.microsoft.com/fwlink/?LinkID=155570。 Source=mscorlib StackTrace: 在 System.Security.SecurityManager.ResolvePolicy(Evidence evidence) 在 DevExpress.Data.Helpers.SecurityHelper.IsPermissionGranted(IPermission permission) 在 DevExpress.Data.Helpers.SecurityHelper.get_IsPartialTrust() 在 DevExpress.Data.Helpers.DataViewDataControllerHelper.InitFastGetRow() 在 DevExpress.Data.Helpers.DataViewDataControllerHelper..ctor(DataControllerBase controller) 在 DevExpress.Data.DataControllerBase.CreateHelper() 在 DevExpress.Data.DataControllerBase.OnListSourceChanged() 在 DevExpress.Data.DataControllerBase.SetListSourceCore(IList value) 在 DevExpress.Data.DataControllerBase.SetListSource(IList value) 在 DevExpress.Data.CurrencyDataController.OnCurrencyManagerChanged() 在 DevExpress.Data.CurrencyDataController.set_CurrencyManager(CurrencyManager value) 在 DevExpress.Data.CurrencyDataController.OnDataSourceChanged() 在 DevExpress.Data.CurrencyDataController.SetDataSource(BindingContext context, Object dataSource, String dataMember) 在 DevExpress.XtraGrid.Views.Base.BaseView.SetDataSource(BindingContext context, Object dataSource, String dataMember) 在 DevExpress.XtraGrid.GridControl.ActivateDataSource() 在 DevExpress.XtraGrid.GridControl.set_DataSource(Object value) 在 ScadaIvGraphicEdit.EditForm.ReadLayerSetting() 在 D:\UGit\utdrawtool\drawtool-dotnet2.0\图形平台\ScadaIvGraphicEdit\ScadaIvGraphicEdit\EditForm.cs 中: 第 12926 行 在 ScadaIvGraphicEdit.EditForm.xtraTabControl_SelectedPageChanged(Object sender, TabPageChangedEventArgs e) 在 D:\UGit\utdrawtool\drawtool-dotnet2.0\图形平台\ScadaIvGraphicEdit\ScadaIvGraphicEdit\EditForm.cs 中: 第 7603 行 在 DevExpress.XtraTab.XtraTabControl.OnSelectedPageChanged(Object sender, ViewInfoTabPageChangedEventArgs e) 在 DevExpress.XtraTab.ViewInfo.BaseTabControlViewInfo.OnSelectedPageChanged(IXtraTabPage prevPage) 在 DevExpress.XtraTab.ViewInfo.BaseTabControlViewInfo.set_SelectedTabPage(IXtraTabPage value) 在 DevExpress.XtraTab.ViewInfo.BaseTabControlViewInfo.OnPageAdded(IXtraTabPage page) 在 DevExpress.XtraTab.XtraTabControl.OnTabPageAdded(XtraTabPage page) 在 DevExpress.XtraTab.XtraTabControl.OnTagPagesCollectionChanged(Object sender, CollectionChangeEventArgs e) 在 DevExpress.XtraTab.XtraTabPageCollection.RaiseCollectionChanged(CollectionChangeEventArgs e) 在 DevExpress.XtraTab.XtraTabPageCollection.OnInsertComplete(Int32 position, Object value) 在 System.Collections.CollectionBase.System.Collections.IList.Add(Object value)
最新发布
06-14
<think>我们遇到的是一个System.NotSupportedException异常,错误信息指出:此方法显式使用的CAS策略已被.NETFramework弃用。若要出于兼容性原因而启用CAS策略,请使用NetFx40_LegacySecurityPolicy配置开关。这个异常通常发生在尝试使用代码访问安全性(CAS)策略时,而该策略在.NETFramework4.0及更高版本中已被弃用。错误堆栈显示在DevExpress组件的代码中(DevExpress.Data.Helpers.SecurityHelper.IsPermissionGranted)调用了SecurityManager.ResolvePolicy,这个方法在.NET4.0中已经过时。解决方案:根据错误信息,我们可以通过启用旧版CAS策略来临时解决这个问题。具体做法是在应用程序的配置文件中(通常是app.config或web.config)添加一个配置开关:NetFx40_LegacySecurityPolicy。步骤:1.打开应用程序的配置文件(app.config或web.config)。2.在<runtime>节点下添加<NetFx40_LegacySecurityPolicyenabled="true"/>。示例配置文件内容:```xml<?xmlversion="1.0"encoding="utf-8"?><configuration><runtime><NetFx40_LegacySecurityPolicyenabled="true"/></runtime></configuration>```注意:-启用此选项会使应用程序回退到旧的CAS策略行为,但这并不是一个长期推荐的解决方案。因为CAS策略在.NET4.0中已被更简单的安全模型取代,微软建议使用新的安全机制(如应用程序域的安全设置)。-长期解决方案是更新代码,避免使用依赖于旧CAS策略的API。但是,由于错误发生在第三方组件(DevExpress)中,我们无法直接修改其代码。因此,可能需要升级DevExpress组件到支持.NET4.0以上版本的更新版本,或者联系DevExpress寻求支持。另外,从堆栈跟踪中我们可以看到,异常发生在ScadaIvGraphicEdit应用程序的EditForm中,具体是在设置GridControl的DataSource时。因此,如果可能,也可以检查是否可以通过其他方式设置数据源,避免触发这个安全策略检查。但是,由于这是DevExpress内部代码,我们可能无法绕过。因此,配置修改是最直接的解决方案。代码示例(配置文件):```xml<configuration><runtime><NetFx40_LegacySecurityPolicyenabled="true"/><!--其他配置--></runtime></configuration>```解释:在配置文件中启用NetFx40_LegacySecurityPolicy后,应用程序将使用旧的CAS策略解析方式,从而避免抛出NotSupportedException异常。然而,需要注意的是,启用此选项可能会带来一些安全风险,因为旧的CAS策略模型较为复杂且容易出错。因此,在启用此选项时,应确保应用程序运行在受信任的环境中。另外,建议在升级到更高版本的DevExpress组件后,检查是否仍然存在此问题,因为新版本的DevExpress可能已经不再使用旧的CAS策略。相关问题:§§相关问题§§:1.如何在.NETCore应用程序中处理类似的安全策略问题?2.除了启用旧版CAS策略,还有哪些方法可以解决System.NotSupportedException异常?3.代码访问安全性(CAS)在.NETFramework4.0中有什么变化?4.如何升级DevExpress控件以避免此类兼容性问题?</think>### 解决方案:解决 CAS 策略弃用导致的 System.NotSupportedException 此错误发生在 .NET Framework 4.0+ 环境中,因为代码使用了过时的代码访问安全性 (CAS) 策略。以下是详细解决方案: #### 方法 1:启用旧版 CAS 策略(临时方案) 在应用程序配置文件中启用 `NetFx40_LegacySecurityPolicy` 开关: ```xml <!-- App.config 或 Web.config --> <configuration> <runtime> <!-- 启用旧版 CAS 策略支持 --> <NetFx40_LegacySecurityPolicy enabled="true"/> </runtime> </configuration> ``` **注意**:这是临时解决方案,仅用于兼容旧代码。长期方案见方法 2。 #### 方法 2:升级代码消除 CAS 依赖(推荐) 1. **定位并替换过时的安全调用** - 检查堆栈中 `SecurityManager.ResolvePolicy` 或 `IPermission` 相关代码 - 替换为 .NET 4.0+ 的安全模型(如基于程序集的信任级别) 2. **更新 DevExpress 组件** ```xml <!-- NuGet 包管理器控制台 --> Update-Package DevExpress.Data Update-Package DevExpress.XtraGrid ``` 3. **修改数据绑定代码** 替换过时的 `CurrencyDataController` 用法: ```csharp // 旧方式(易触发 CAS 检查) gridControl.DataSource = GetData(); // 新方式:使用 BindingList 或 ObservableCollection var bindingList = new BindingList<DataItem>(GetData()); gridControl.DataSource = bindingList; ``` #### 方法 3:重构数据加载逻辑 ```csharp private void ReadLayerSetting() { try { // 使用安全的数据加载方式 var data = LoadDataFromSafeSource(); gridControl.DataSource = new BindingSource(data, null); } catch (SecurityException ex) { // 处理安全异常 Logger.Error("Security error in data loading", ex); } } ``` --- ### 关键问题分析 | 问题原因 | 解决方案方向 | 风险等级 | |------------------------|-----------------------------|---------| | .NET 4.0+ 弃用 CAS 策略 | 启用旧策略或升级代码 | 高 | | 过时的 DevExpress API | 更新组件版本 (v18.1+) | 中 | | 不安全的数据绑定方式 | 使用 BindingSource 包装数据 | 低 | --- ### 最佳实践建议 1. **安全策略迁移**: ```csharp // 替换过时的安全检查 // 旧方式: if (!SecurityManager.IsGranted(new FileIOPermission(...))) // 新方式: try { File.OpenRead("path"); } catch (SecurityException) { ... } ``` 2. **组件更新步骤**: ```powershell # 1. 备份项目 # 2. 更新所有 DevExpress 包 Update-Package DevExpress.* # 3. 重新编译并修复 API 变更 ``` 3. **数据绑定优化**: ```csharp // 使用线程安全的数据源 var threadSafeData = new BindingList<DataModel>(); await Task.Run(() => { foreach (var item in FetchDataFromDB()) threadSafeData.Add(item); }); gridView.DataSource = threadSafeData; ``` ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值