Как добавить метки (не только одну) в ячейку DataGridView

Мне нужна сетка, которая имеет несколько разных цветовых меток в последнем столбце, как показано ниже. Я знаю, как сделать с одной меткой, но мне нужно 4, и мне нужно сделать их видимыми или невидимыми с помощью значения (değer) в сетке.

например

  if value is below 20 the red label will appear,

  if value is over 40 the yellow and orange will appear same time,

  if value is between 20-40 green label will appear... 

любая помощь будет оценена.

сетка

2 ответа

Решение

Вам нужна функция, которая выглядит следующим образом:

void UpdateGridColumnLabels(int index){
    int width = column.Width;
    int height = gridRow.Height;
    Bitmap bmp = new Bitmap(width, height, g);
    Graphics g = Graphics.FromImage(bmp);
    if(value < 20)
        g.FillRect(Brushes.Red, 0, 0, width / 3, height);
    else if(value >= 20 && value < 40)
        g.FillRect(Brushes.Orange, width/3, 0, width / 3, height);
    else
        g.FillRect(Brushes.Yellow, 2 * width/3, 0, width / 3, height);
    gridViewImageColumn[index] = bmp;
}

Здесь вы создаете растровое изображение, которое вписывается в вашу ячейку. Затем вы используете класс Graphics для динамического добавления меток в зависимости от ваших условий. После этого это растровое изображение с метками становится содержимым ячейки.

Вы имеете в виду, как это?

<asp:TemplateField HeaderText="Select" ItemStyle-HorizontalAlign="Center" ItemStyle-VerticalAlign="Middle">
        <ItemTemplate>
            <asp:Label runat="server" ID="lblId" Text='<%# Bind("Id") %>'
                Visible="false"></asp:Label>
            <asp:Label runat="server" ID="lblId" Text='<%# Bind("Id") %>'
                Visible="false"></asp:Label>
        </ItemTemplate>
    </asp:TemplateField>

Код позади:

protected void GridView1_RowDataBound(object sender,  GridViewRowEventArgs e)
    {
        try
        {

            Label lbl1 = (e.Row.FindControl("lblFirstEntry") as Label);
            //Play with your control

            Label lbl2 = (e.Row.FindControl("lblSecondEntry") as Label);        
            //Play with your control            
        }
    }
Другие вопросы по тегам