Ссылка на текст из ячейки WPF DataGrid - PullRequest
0 голосов
/ 06 января 2010

Мне нужно получить дату и время из таблицы SQL, но у меня есть две проблемы:

  1. Мне нужно обратиться к строке из выбранной ячейки DataGrid. Я пробовал "bksDataGrid.CurrentCell.Item", но это не работает.
  2. Не совсем проблема, но cmd вернет SQL datetime как объект. Можно ли преобразовать его в .NET DateTime?

        object obj = new object();
        using (SqlConnection conn=new SqlConnection (SQLLogic.ConnString1))
        {
            conn.Open();
            SqlCommand cmd = new SqlCommand(String.Format("SELECT ReturnDate FROM Borrows WHERE Name='{0}'",bksDataGrid.CurrentCell.Item, conn),conn);
            obj = cmd.ExecuteScalar();
            conn.Close();
        }
        obj = Convert.ToDateTime(obj);
    

Извините, за возможные грамматические ошибки.

1 Ответ

1 голос
/ 07 января 2010

Для # 1 вы можете сделать следующее:

foreach (DataGridCellInfo cellInfo in dataGrid.SelectedCells)
{
    DataGridCell gridCell = TryToFindGridCell(dataGrid, cellInfo);
    if (gridCell != null && gridCell.Content is TextBlock)
        Console.WriteLine(((TextBlock)gridCell.Content).Text);
}

ниже приведена реализация процедуры TryToFindGridCell:

static DataGridCell TryToFindGridCell(DataGrid grid, DataGridCellInfo cellInfo)
{
    DataGridCell result = null;
    DataGridRow row = (DataGridRow)grid.ItemContainerGenerator.ContainerFromItem(cellInfo.Item);
    if (row != null)
    {
        int columnIndex = grid.Columns.IndexOf(cellInfo.Column);
        if (columnIndex > -1)
        {
            DataGridCellsPresenter presenter = GetVisualChild<DataGridCellsPresenter>(row);
            result = presenter.ItemContainerGenerator.ContainerFromIndex(columnIndex) as DataGridCell;
        }
    }
    return result;
}

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;
}

# 2:

a.line "object obj= новый объект (); "не требуется;

b. Вы можете привести результат cmd.ExecuteScalar к DateTime.Вы также хотели бы проверить, что это не нуль или DBNull перед приведением;в противном случае вы можете получить исключение «Указанное приведение неверно».

надеюсь, это поможет, с уважением

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...