Tag: datagrid

如何调整WPF DataGrid的大小以适应其内容?

目的 我想为DataGrid设置这样的大小(标准,来自WPF),因此所有单元格(文本)都是完全可见的。 我有一个带有DockPanel的窗口,里面有DataGrid,所以当我调整窗口大小时,所有嵌套的小部件(DockPanel和DataGrid)都会相应地resize。 示例(编辑-1) 假设您有100像素宽的窗口,并且您有一列DataGrid,该单元格是“快速棕色狐狸……”(400像素宽)。 因此,DataGrid应该调整为400像素(可能更多,因为填充),窗口也应该调整为400像素(由于填充也更多)。 我没有找到任何标准方法来做到这一点(AFAIK WPF提供了将内容剪辑到所需宽度的方法,我的问题正好相反),所以我提出了这样丑陋的解决方法,这不太合适。 解决方法 迭代DataGrid标头(假设它们只是字符串)并计算文本所需的宽度 迭代每列的DataGrid行(假设它们是TextBlock或TextBox)并计算文本所需的最大宽度 – 为TextBlock / TextBox添加水平填充,为DataGrid单元添加水平边距 对列的DataGrid ActualWidth和(2)中计算的最大宽度之间的所有差异求和 通过(3)中计算的差值增加窗口宽度 问题 我做了几次测试,在某些情况下计算出的宽度太大(这是一个小问题),因为有些情况太小了。 问题从它的核心过程开始 – 计算TextBox / TextBlock所需的宽度,计算出的宽度总是比它应该小1个单位(如果我将宽度设置为计算宽度,则始终剪切文本中的1个像素)。 那么我忽略了哪个因素呢? 或者更好 – 是否已经有一些方法可以调整DataGrid以适应其内容? 代码 计算文本所需的宽度(此处为TextBlock): public static double TextWidth(this TextBlock widget, string text) { var formattedText = new FormattedText(text, // can use arbitrary text System.Globalization.CultureInfo.CurrentCulture, widget.FlowDirection, widget.FontFamily.GetTypefaces().FirstOrDefault(), widget.FontSize, widget.Foreground); […]

UserControl上的DataGrid不显示绑定的ObservableCollection

我有一个带有一些加载集合的按钮的MainWindow: 然后我有一个UserControl,它应该显示已加载的集合,但什么都不显示。 这里我如何将数据放入集合中(如果我调试,值就在那里): Application.Current.Dispatcher.Invoke(() => MainWindowViewModel.ResultViewModel.Model.Collections.Add(Collection)); Collections是ObservableCollection 的类型; 似乎我在绑定中缺少一些东西,但我对WPF和MVVM很新,我找不到它。 我已经阅读了有关DependencyProperty但我想为我的userControl创建一个ViewModel,因为它最终会变得更加复杂。 我真的很感激任何帮助。

绑定DataGridComboBoxColumn

我试图将Ob的ObservableCollection绑定到DataGrid的DataGridComboBoxColumn。 DataGrid定义是: 这是ViewModel和Model public partial class MainWindow : Window { public MainWindow() { InitializeComponent(); var viewModel = new ViewModel(); DataContext = viewModel; } } public class ViewModel : ViewModelBase { private ObservableCollection _model; public ViewModel() { var list = new List(); var roadTypes = new ObservableCollection { new RoadType { Code = 1, Id = […]

如何设置DataGridColumn的宽度以适合内容(“Auto”),但是完全填充MVVM中DataGrid的可用空间?

我有一个包含一些数据的WPF DataGrid 。 我想设置列的宽度,使内容适合并永远不会被裁剪(相反,水平滚动条应该变得可见)。 另外,我希望DataGrid可以填充整个可用位置(我正在使用DockPanel )。 我使用以下代码(简化): 这显然不能使用Width=”Auto”开箱即用,因为它总是看起来像这样: 这显然看起来很难看。 我想选择整行,或者更好的是填充整个宽度的列,但是可以看出,这不起作用。 如果我改用Width=”*” ,列的内容会被裁剪,这对我来说更糟糕。 我在这里找到了一个类似的问题 ,并在那里发布了一个解决方法。 这可能有用,但我正在使用MVVM模式,因此ItemsSource在ViewModel中得到更新 ,我无法想到从那里开始的方式,因为我无法访问DataGridColumn的ActualWidth属性。 另外,如果可能的话,我想只在XAML中这样做。 我将不胜感激任何帮助。 谢谢! 编辑:因为我仍然不知道如何处理它,我开始小小的赏金。 关于我可以对我的问题采取什么建议,我会非常高兴。 再次感谢! 编辑2:在香肠’回答后,我再次考虑了这些选项。 问题是我还需要在应用程序运行期间更新Width和MinWidth属性,因此不仅在加载窗口之后。 我已经尝试过这样的事情 column.Width = new DataGridLength(1, DataGridLengthUnitType.Auto); column.MinWidth = column.ActualWidth; column.Width = new DataGridLength(1, DataGridLengthUnitType.Star); 在某些事件中,当DataGrid的基础ItemsSource正在更新时触发。 但是,这不起作用,因为在Auto上设置Width后, ActualWidth属性似乎没有变化。 有没有选项以某种方式“重新”它以便更新ActualWidth属性? 谢谢!

用户编辑WPF DataGrid Cell时如何知道?

我有一个WPF DataGrid 。 用户可以编辑cell的数据。 我想要一个event ,我想检查cell是否为empty 。 用户可以使用Del Backspace Cut选项等清空数据。 给我一个event和event handler来做到这一点。 我已经尝试过OnCellEditEnding event但只有在编辑完成后才会触发。 我希望每次用户inputs时检查cell是否为空。

在WPF中打印DataGrid中的所有数据

我正在研究WPF应用程序。 我在DataGrid中有数据,我必须打印其中的所有数据。 我试过这个…… publicMainWindow() { InitializeComponent(); DataTabledt = newDataTable(); dt.Columns.Add(“S.No”); dt.Columns.Add(“Name”); dt.Columns.Add(“Father’s Name”); dt.Columns.Add(“DOB”); dt.Columns.Add(“Qualification”); dt.Columns.Add(“Gender”); dt.Columns.Add(“SSC %”); dt.Columns.Add(“+2 %”); dt.Columns.Add(“Graduation %”); dt.Columns.Add(“Work Experience”); dt.Columns.Add(“Company”); object[] rowValues = {“01″,”Gopi”,”Ravi”,”31″,”Degree”,”M”, “88”,”85″, “80”,”2 Years”,”Blah Blah”}; dt.Rows.Add(rowValues); dt.AcceptChanges(); myGrid.DataContext = dt.DefaultView; } privatevoidPrint_Click(object sender, RoutedEventArgs e) { PrintDialogprintDlg = newPrintDialog(); if ((bool)printDlg.ShowDialog().GetValueOrDefault()) { Sizepagesize = newSize(printDlg.PrintableAreaWidth,printDlg.PrintableAreaHeight); myGrid.Measure(pagesize); myGrid.Arrange(newRect(5, […]

C#Silverlight Datagrid – 行颜色更改

你如何改变silverlight数据网格行的颜色?! 我已经尝试了这个但它似乎没有工作我想要它…随机行得到错误的颜色: void dataGrid1_LoadingRow(object sender, DataGridRowEventArgs e) { var c = e.Row.DataContext as Job; if (c != null && c.Status.Contains(“complete”)) e.Row.Background = new SolidColorBrush(Colors.Green); else e.Row.Background = new SolidColorBrush(Colors.Red); }

必须将带有’LinkBut​​ton’类型的控件xxx放在带有runat = server的表单标签内

我有一个DataGrid ,我试图在单击一个ASP.NET 按钮时导出。 确切的错误是: 必须将带有’LinkBut​​ton’类型的控件’ctl00_body_RollupDG_ctl02_btnShowGLdetail’放在带有runat = server的表单标记内。 我在这里发现了类似的问题,但似乎都表明这是因为ASP.NET控件没有放在ContentPlaceHolder中,或者ContentPlaceHolder 没有放在RunAt Server表单中。 我有这两个,所以情况并非如此。 我的ExportExcelFile方法捕获RenderControl()处的HttpException (如上面的屏幕截图所示)。 该代码如下: protected void ExportExcelFile(object Sender, EventArgs e) { //export to excel var grdResults = (periodCriteria.SelectedValue == “year”) ? RollupDG : QuarterDG; var response = HttpContext.Current.Response; response.Clear(); response.Charset = String.Empty; response.ContentType = “application/vnd.ms-excel”; response.AddHeader(“Content-Disposition”, “attachment; filename=GlBudgetReport.xls”); using (var sw = new StringWriter()) { […]

从文本文件导入数据并在datagrid中显示

我想从文本文件导入数据并将其显示在数据网格中。 文本文件是分隔的。第一行包含列标题,其余包含各列的数据。 文本文件中存在列分隔符和行分隔符。我想在数据网格中显示数据,其中标题将是列名称,所有数据将显示在每列下。 我已成功从文件中获取数据。 问题是每次文件可能不同,列数可能会有所不同。 所以我can not use a predefined class 。我想create a class for run time and add the properties at run time并将列表显示到数据网格。 我该如何完成这项任务?

基于带标志的枚举的MultiSelect WPF ComboBox / ListBox

所以我可能会稍微推动界限…… 基本上我有以下枚举,用C#代码声明: [Flags] public enum FlaggedEnum : int { Option1 = 1, Option2 = 2, Option3 = 4, Option4 = 8, … Option16 = 32768, None = 0 } 此枚举是我已成功绑定到DataGrid对象的对象的成员。 成功意味着我已成功绑定所有其他字段。 🙂 我想要实现的是一个控件,其中检查上面所有适当的选项,其行为和行为类似于ComboBox / ListBox。 因此,您单击该字段并弹出一个下拉菜单,可以“检查”所需的任何选项。 控件还必须能够从枚举中读取并编写枚举。 我是一个WPF新手,所以我不知道在哪里可以创建一个ComboBox并绑定到列…任何帮助将不胜感激!