Как реализовать условное форматирование в GridView

df.merge(pd.DataFrame({'Value': values}, index=indexes), 
         left_index=True, 
         right_index=True, 
         how='left')

Вы можете создать фрейм данных из values & amp; index объединить его с исходным фреймом данных, по сути делая левое соединение.

В качестве альтернативы, используя сначала комбайн, написать еще короче

df.combine_first(pd.DataFrame({'Value': values}, index=indexes))
5
задан Matthew Dresser 19 March 2009 в 10:22
поделиться

2 ответа

Не уверенный, если можно использовать BoundField, но если Вы изменяете его на TemplateField, Вы могли бы использовать функцию форматирования как в этой ссылке.

т.е. что-то как

<%# FormatDataValue(DataBinder.Eval(Container.DataItem,"ItemValue")) %>

Затем в Вашем codebehind, можно добавить Защищенную Функцию

Protected Function FormatDataValue(val as object) As String
    'custom enter code hereformatting goes here
End Function

Или Вы могли сделать что-то в событии OnRowCreated gridview, как в этой ссылке

<asp:GridView ID="ctlGridView" runat="server" OnRowCreated="OnRowCreated" />

эта функция является условным форматированием на основе того, является ли значение данных, аннулируют / двойное

protected void OnRowCreated(object sender, GridViewRowEventArgs e)
{
    if (e.Row.RowType == DataControlRowType.DataRow)
    {
        DataRowView drv = e.Row.DataItem as DataRowView;
        Object ob = drv["ItemValue"];


        if (!Convert.IsDBNull(ob) )
        {
            double dVal = 0f;
             if (Double.TryParse(ob.ToString(), out dVal))
             {
                 if (dVal > 3f)
                 {
                     TableCell cell = e.Row.Cells[1];
                     cell.CssClass = "heavyrow";
                     cell.BackColor = System.Drawing.Color.Orange;
                 }
             }
        }
    }
}
12
ответ дан 18 December 2019 в 12:02
поделиться

С BoundField необходимо изменить класс Объекта.

Если Вы не хотите изменять свой CodeBehind существует своего рода прием, можно сделать использование TemplateField:

        <asp:GridView ID="MyTable" runat="server" AutoGenerateColumns="False">
        <Columns>
            <asp:BoundField DataField="ItemName" HeaderText="Name" />
            <asp:TemplateField HeaderText="Value">
                <ItemTemplate>
                    <asp:Label ID="Label1" runat="server" Text='<%# ((Eval("ItemValue") is DateTime) ? ((DateTime)Eval("ItemValue")).ToShortDateString() : Eval("ItemValue")) %>'></asp:Label>
                </ItemTemplate>
            </asp:TemplateField>
        </Columns>
    </asp:GridView>

очевидно, можно сделать это для любого типа объекта, но возможно поле "Text" стало бы.. сложный..

между прочим.. мой CodeBehind для этого примера был просто, Вы классифицируете Объект и этот Page_Load ():

    protected void Page_Load(object sender, EventArgs e)
    {
        Item i1 = new Item();
        i1.ItemName = "name1";
        i1.ItemValue = "foo";
        Item i2 = new Item();
        i2.ItemName = "name2";
        i2.ItemValue = DateTime.Now;
        List<Item> list1 = new List<Item>();
        list1.Add(i1);
        list1.Add(i2);
        MyTable.DataSource = list1;
        MyTable.DataBind();
    }

и результат был корректен ;)

1
ответ дан 18 December 2019 в 12:02
поделиться
Другие вопросы по тегам:

Похожие вопросы: