2013-04-22 40 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);     

}