从Datagrid单元格获取字符串值 [英] Getting String value from Datagrid cell
问题描述
我成功获取了所选行和我想要的单元格信息。
但它看起来像System.Windows.Controls.DataGridCell:ABCDEFG
我只需要ABCDEFG部分作为字符串变量使用。
我已经尝试了所有的铸造和转换方法没有成功...
错误1无法将类型'System.Windows.Controls.DataGridCell'隐式转换为'string'
任何人都可以协助请
大班使用的扩展方法:
private void dataGrid1_SelectionChanged(object sender,SelectionChangedEventArgs e)
{
var selectedRow = dataGrid1.GetSelectedRow();
var columnCellSC = dataGrid1.GetCell(selectedRow,0);
//这就是我需要在剩余的代码中使用返回值作为字符串
}
附加类:
使用System;
使用System.Collections.Generic;
使用System.Linq;
使用System.Text;
使用System.Windows.Media;使用System.Windows.Controls
;
使用System.Windows.Controls.Primitives;
使用System.Threading.Tasks;
使用System.Data;
名称空间DataGridHelpers
{
///< summary>
/// DataGrid的扩展方法
///< / summary>
公共静态类DataGridHelper
{
///< summary>
///获取元素的可视子元素
///< / summary>
///< typeparam name =T>预期类型< / typeparam>
///< param name =parent>预期元素的父级< / param>
///< returns>可视子项< / returns>
public static T GetVisualChild< T>(Visual parent)其中T:Visual
{
T child = default(T);
int numVisuals = VisualTreeHelper.GetChildrenCount(parent);
for(int i = 0; i< numVisuals; i ++)
{
Visual v =(Visual)VisualTreeHelper.GetChild(parent,i);
child = v为T;
if(child == null)
{
child = GetVisualChild< T>(v);
}
if(child!= null)
{
break;
}
}
返回孩子;
}
///< summary>
///获取DataGrid
///< / summary>的指定单元格
///< param name =dataGrid1> DataGrid实例< / param>
///< param name =row>单元格的行< / param>
///< param name =column>单元格的列索引< / param>
///< returns> DataGrid的单元格< / returns>
public static DataGridCell GetCell(this DataGrid dataGrid1,DataGridRow row,int column)
{
if(row!= null)
{
DataGridCellsPresenter presenter = GetVisualChild< DataGridCellsPresenter> ;(行);
if(presenter == null)
{
dataGrid1.ScrollIntoView(row,dataGrid1.Columns [column]);
presenter = GetVisualChild< DataGridCellsPresenter>(row);
}
DataGridCell cell =(DataGridCell)presenter.ItemContainerGenerator.ContainerFromIndex(column);
返回单元格;
}
返回null;
}
///< summary>
///获取DataGrid
///< / summary>的指定单元格
///< param name =grid> DataGrid实例< / param>
///< param name =row>单元格的行索引< / param>
///< param name =column>单元格的列索引< / param>
///< returns> DataGrid的单元格< / returns>
public static DataGridCell GetCell(this DataGrid grid,int row,int column)
{
DataGridRow rowContainer = grid.GetRow(row);
返回grid.GetCell(rowContainer,column);
}
///< summary>
///获取DataGrid的指定行
///< / summary>
///< param name =grid> DataGrid实例< / param>
///< param name =index>行的索引< / param>
///< returns> DataGrid的一行< / returns>
public static DataGridRow GetRow(this DataGrid grid,int index)
{
DataGridRow row =(DataGridRow)grid.ItemContainerGenerator.ContainerFromIndex(index);
if(row == null)
{
//可以虚拟化,进入视图并重试。
grid.UpdateLayout();
grid.ScrollIntoView(grid.Items [index]);
row =(DataGridRow)grid.ItemContainerGenerator.ContainerFromIndex(index);
}
返回行;
}
///< summary>
///获取DataGrid的选定行
///< / summary>
///< param name =grid> DataGrid实例< / param>
///< returns>< / returns>
public static DataGridRow GetSelectedRow(this DataGrid grid)
{
return(DataGridRow)grid.ItemContainerGenerator.ContainerFromItem(grid.SelectedItem);
}
}
}
我正在研究类似的问题但是我无法让GetSelectedRow()函数返回除null之外的任何内容。你能否确认你正在使用的.net版本,我正在尝试使用.net 4.5中的wpf?
private void dgPrimary1_CopyClick( object sender,RoutedEventArgs e)
{
var selectedRow = dgPrimary1.GetSelectedRow();
var columnCell = dgPrimary1.GetCell(selectedRow, 0 );
}
问候,
Tim。
尝试这个..
var cellcontent =(TextBlock)columnCellSC.Content;
string cellvalue = cellcontent.Text;
string myString = dataGrid1.CurrentItem.ToString();
它给出行值。
并使用以下代码获取单元格值。
http://www.codeproject.com/Questions/162989/How-to-切-A-特定部分从 - A-string.aspx
I successfully get the row selected and the cell info I want.
But it looks like this "System.Windows.Controls.DataGridCell: ABCDEFG"
I only need the ABCDEFG part to use as a string variable.
I’ve tried all the casting and conversion methods with no success…
Error 1 Cannot implicitly convert type 'System.Windows.Controls.DataGridCell' to 'string'
can anyone assist please
Extension methods used from main class:
private void dataGrid1_SelectionChanged(object sender, SelectionChangedEventArgs e) { var selectedRow = dataGrid1.GetSelectedRow(); var columnCellSC = dataGrid1.GetCell(selectedRow, 0); //THIS IS WHERE I NEED TO BE ABLE TO USE THE RETURNED VALUES AS STRINGS IN THE REST OF MY CODE }
ADDITIONAL CLASS:
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Windows.Media; using System.Windows.Controls; using System.Windows.Controls.Primitives; using System.Threading.Tasks; using System.Data; namespace DataGridHelpers { /// <summary> /// Extension methods for DataGrid /// </summary> public static class DataGridHelper { /// <summary> /// Gets the visual child of an element /// </summary> /// <typeparam name="T">Expected type</typeparam> /// <param name="parent">The parent of the expected element</param> /// <returns>A visual child</returns> public static T GetVisualChild<T>(Visual parent) where T : Visual { T child = default(T); int numVisuals = VisualTreeHelper.GetChildrenCount(parent); for (int i = 0; i < numVisuals; i++) { Visual v = (Visual)VisualTreeHelper.GetChild(parent, i); child = v as T; if (child == null) { child = GetVisualChild<T>(v); } if (child != null) { break; } } return child; } /// <summary> /// Gets the specified cell of the DataGrid /// </summary> /// <param name="dataGrid1">The DataGrid instance</param> /// <param name="row">The row of the cell</param> /// <param name="column">The column index of the cell</param> /// <returns>A cell of the DataGrid</returns> public static DataGridCell GetCell(this DataGrid dataGrid1, DataGridRow row, int column) { if (row != null) { DataGridCellsPresenter presenter = GetVisualChild<DataGridCellsPresenter>(row); if (presenter == null) { dataGrid1.ScrollIntoView(row, dataGrid1.Columns[column]); presenter = GetVisualChild<DataGridCellsPresenter>(row); } DataGridCell cell = (DataGridCell)presenter.ItemContainerGenerator.ContainerFromIndex(column); return cell; } return null; } /// <summary> /// Gets the specified cell of the DataGrid /// </summary> /// <param name="grid">The DataGrid instance</param> /// <param name="row">The row index of the cell</param> /// <param name="column">The column index of the cell</param> /// <returns>A cell of the DataGrid</returns> public static DataGridCell GetCell(this DataGrid grid, int row, int column) { DataGridRow rowContainer = grid.GetRow(row); return grid.GetCell(rowContainer, column); } /// <summary> /// Gets the specified row of the DataGrid /// </summary> /// <param name="grid">The DataGrid instance</param> /// <param name="index">The index of the row</param> /// <returns>A row of the DataGrid</returns> public static DataGridRow GetRow(this DataGrid grid, int index) { DataGridRow row = (DataGridRow)grid.ItemContainerGenerator.ContainerFromIndex(index); if (row == null) { // May be virtualized, bring into view and try again. grid.UpdateLayout(); grid.ScrollIntoView(grid.Items[index]); row = (DataGridRow)grid.ItemContainerGenerator.ContainerFromIndex(index); } return row; } /// <summary> /// Gets the selected row of the DataGrid /// </summary> /// <param name="grid">The DataGrid instance</param> /// <returns></returns> public static DataGridRow GetSelectedRow(this DataGrid grid) { return (DataGridRow)grid.ItemContainerGenerator.ContainerFromItem(grid.SelectedItem); } } }
Hi, I'm working on a similar problem but I can't get the GetSelectedRow() function to return anything other than null. Can you confirm what version of .net you are using, I'm trying with wpf in .net 4.5 ?
private void dgPrimary1_CopyClick(object sender, RoutedEventArgs e) { var selectedRow = dgPrimary1.GetSelectedRow(); var columnCell = dgPrimary1.GetCell(selectedRow, 0); }
Regards,
Tim.
Try this one..
var cellcontent=(TextBlock)columnCellSC.Content; string cellvalue=cellcontent.Text;
string myString = dataGrid1.CurrentItem.ToString();
it give row value.,
and use the below code to get cell value,.
http://www.codeproject.com/Questions/162989/How-to-cut-a-particular-part-from-a-string.aspx
这篇关于从Datagrid单元格获取字符串值的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!