2013-04-22 37 views
2

我有一个使用xaml设计的数据网格中的文本框。我可以使用datagrid的事件访问之前在代码文件中使用xaml设计的文本框。请帮我.....................我如何使用datagrid的事件访问datagrid内部的文本框?

 <Window x:Class="GridTextBox.Test" 
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" WindowState="Maximized" 
    Title="Test" Height="300" Width="300" Loaded="Window_Loaded"> 
<Grid> 
    <Grid.RowDefinitions> 
     <RowDefinition Height="30"/> 
     <RowDefinition Height="*"/> 
     <RowDefinition Height="30"/> 
    </Grid.RowDefinitions> 
    <Grid.ColumnDefinitions> 
     <ColumnDefinition Width=".25*"/> 

     <ColumnDefinition Width=".25*"/> 
     <ColumnDefinition Width=".25*"/> 
     <ColumnDefinition Width=".25*"/> 
    </Grid.ColumnDefinitions> 
    <DataGrid Grid.Row="1" Grid.Column="1" Name="datagrid1" SelectionChanged="datagrid1_SelectionChanged" LoadingRowDetails="DataGrid_LoadingRowDetails" Height="auto" Width="auto"> 
     <DataGrid.Columns> 
      <DataGridTemplateColumn> 
       <DataGridTemplateColumn.CellTemplate> 
        <DataTemplate> 
         <TextBox Name="txtEmpid" Text="hiiiiii"></TextBox> 
        </DataTemplate> 
       </DataGridTemplateColumn.CellTemplate> 
      </DataGridTemplateColumn> 
     </DataGrid.Columns> 
    </DataGrid> 
</Grid> 

+0

如何使用DataGrid1中的事件访问文本框txtEmpid ??????请帮助我 – 2013-04-22 05:09:15

+0

与事件你的意思?在文本框中输入关键字,并且想要将其作为数据网格键处理?你可以寻找路由事件 – BreakHead 2013-04-22 07:34:42

+0

每当用户点击网格...即通过选定的索引更改事件我想获得在文本框中的文本作为hiiiii – 2013-04-22 09:22:00

回答

0

首先,你需要获得使用ItemContainerGenerator摆脱数据正确的行(在你的datagrid1_SelectionChanged事件中)。

var row = (DataGridRow)datagrid1.ItemContainerGenerator. 
        ContainerFromItem(datagrid1.SelectedItem); 

然后得到的TextBlock这样的:

var text = datagrid1.Columns[0].GetCellContent(row) as TextBlock; 
+0

我无法得到这个工作 - 我得到了正确的行, GetCellContent'返回一个'ContentPresenter',它在“as”投射到TextBox之后变为'null'。我的XAML看起来非常接近原始问题中的那个。 – Adrian17 2014-10-01 11:22:55

0
var cellInfo=dataGrid1.SelectedCells[0]; 
var txt=cellInfo.Column.GetCellContent(cellInfo.Item); 

或还有一个解决方案,以获得那里有动态的行是那里所有文本框中的文本。

DataRowView dataRow = (DataRowView)dataGrid1.SelectedItem; 

int Columnindex = datagrid1.CurrentCell.Column.DisplayIndex; 
int iGridRowsCount  = ArgumentsDataGridforTestcasessTab.Items.Count; 
for (int jRow = 0; jRow <= iGridRowsCount - 1; jRow++) 
{ 

    DataGridCell cell = GetCell(jRow, Columnindex); 
    ContentPresenter _contentPresenter = new ContentPresenter(); 
    _contentPresenter = (ContentPresenter)cell.Content; 

    // get the attached control from the cell 
    TextBox myTextBox = GetVisualChild<TextBox>(_contentPresenter);     

}