динамически выравнивайте столбцы сетки слева и справа

#c# #asp.net #gridview

Вопрос:

У меня есть обзор сетки. Я динамически связываю представление сетки в коде, используя таблицу данных. В моем представлении сетки всего два столбца: один-текстовый, а другой-числовой. Я хочу выровнять левый столбец, текстовый столбец слева, а числовой столбец справа. Ниже приведен мой код:

 DataTable dt = new DataTable();
        
dt.Columns.Add("Fee Breakdown", typeof(string));
dt.Columns.Add(" ", typeof(string));
dt.Rows.Add("First Page", String.Format("{0:0.00}", 14));
dt.Rows.Add("Additional Page(s)", String.Format("{0:0.00}", 3));
        
        
protected void grdCalculate_rowDataBound(object sender, GridViewRowEventArgs e)
{
    if (e.Row.RowType == DataControlRowType.DataRow)
    {
        e.Row.Cells[0].HorizontalAlign = HorizontalAlign.Left;
        e.Row.Cells[1].HorizontalAlign = HorizontalAlign.Right;
                
    }
}
 

Числа 14 и 3 в dt.rows.add являются динамически вычисляемым значением, и количество цифр может увеличиваться и уменьшаться. Приведенный выше код в rowsdatabound не выравнивает столбцы слева и справа, я пытаюсь выровнять столбцы так, чтобы все десятичные дроби могли быть правильно выровнены по правому краю и было проще добавлять числа. Ниже приведено изображение gridview. Как вы можете видеть, десятичные дроби неправильно указаны в $14,00 и $3,00. Как я могу выровнять первую строку слева и правую строку справа. Ниже приведен мой код страницы aspx:

 <asp:GridView ID="grdCalculate" runat="server" GridLines="Horizontal" OnRowDataBound="grdCalculate_RowDataBound" ></asp:GridView>
 

введите описание изображения здесь

Ответ №1:

Попробуйте этот формат:

    protected void GridView1_RowDataBound(object sender, GridViewRowEventArgs e)
    {
        if (e.Row.RowType == DataControlRowType.DataRow) 
        {
            e.Row.Cells[3].HorizontalAlign = HorizontalAlign.Right;
            e.Row.Cells[3].Text = String.Format("{0:C2}", Convert.ToDecimal(e.Row.Cells[3].Text));
        }
    }
 

А затем ПРОСТО вставьте значение во время привязки.

напр.:

 dt.Rows.Add("First Page", 14);
 

Ответ №2:

Это немного другой подход, но вы можете попробовать использовать приведенное ниже, так как у вас есть два столбца для привязки:

 <asp:GridView ID="grdCalculate" runat="server" GridLines="Horizontal" OnRowDataBound="grdCalculate_RowDataBound">
 <columns>
   <asp:TemplateField ItemStyle-HorizontalAlign="Left" HeaderText="Name">
       <ItemTemplate><%# Eval("Property_Name_1")%></ItemTemplate>
   </asp:TemplateField>
   <asp:TemplateField ItemStyle-HorizontalAlign="Right" HeaderText="Price">
       <ItemTemplate><%# Eval("Property_Name_2")%></ItemTemplate>
   </asp:TemplateField>
 </columns>
</asp:GridView>
 

Просто использовал это свойство ItemStyle-HorizontalAlign в заголовке GridView.