Как управлять столбцами datagridview при использовании DataSource?

Я использую datagridview на С # и загружаю его с помощью объекта источника данных. Если AutoGenerateColumns равно true, все работает нормально, и все столбцы генерируются с их содержимым. Но я хочу отображать только 1-й столбец и использовать информацию об остальных столбцах для всплывающей подсказки 1-го столбца.

Я попытался установить AutoGenerateColumns на false и создал столбец, названный как первый столбец, добавленный, когда AutoGenerateColumns равен true, но при этом строки не добавляются.

Как правильно это сделать?

Обновление: добавление [Browsable(false)] над всеми полями, которые я хочу скрыть, сработало :)

Теперь, как я могу использовать данные из «скрытых» столбцов и использовать их для всплывающих подсказок ячеек 1-го столбца?


person slemdx    schedule 27.04.2011    source источник
comment
Для правильного ответа на этот вопрос действительно требуется образец кода - вы уверены, что правильно подключили свой столбец? Вам необходимо установить DataPropertyName в столбце для свойства, которое вы хотите использовать в столбце.   -  person debracey    schedule 27.04.2011
comment
Вы используете визуальную студию 08/10?   -  person clamchoda    schedule 27.04.2011


Ответы (2)


Вы можете сделать это в событии форматирования ячейки. Вот фрагмент кода из msdn.

// Sets the ToolTip text for cells in the Rating column.
void dataGridView1_CellFormatting(object sender, 
    DataGridViewCellFormattingEventArgs e)
    {
    if ( (e.ColumnIndex == this.dataGridView1.Columns["Rating"].Index)
        && e.Value != null )
    {
        DataGridViewCell cell = 
            this.dataGridView1.Rows[e.RowIndex].Cells[e.ColumnIndex];
        if (e.Value.Equals("*"))
        {                
            cell.ToolTipText = "very bad"; // you can get the value from your other cells using the above technique with .value instead of .index
        }
        else if (e.Value.Equals("**"))
        {
            cell.ToolTipText = "bad";
        }
        else if (e.Value.Equals("***"))
        {
            cell.ToolTipText = "good";
        }
        else if (e.Value.Equals("****"))
        {
            cell.ToolTipText = "very good";
        }
    }
}

Дополнительная информация здесь

person clamchoda    schedule 27.04.2011

Я думаю, что вам нужно что-то вроде этого:

<asp:GridView ID="gridStatus" runat="server" AutoGenerateColumns="False"  DataSourceID="SqlDataSourceForStatusGrid">
    <Columns>
        <asp:BoundField DataField="ID" Visible =false />
        <asp:BoundField DataField="StudentName" HeaderText="Name" SortExpression="StudentName" />

Таким образом, у вас будет столбец, и вы можете получить его, используя Grid.Rows [selectedRow] .Cells [index] .....

person sajoshi    schedule 27.04.2011