2013-08-09 6 views
2

Я пытаюсь показать значения в процентном формате в Gridview. Прямо сейчас я могу получить процентные значения вместе со своим символом, но мне нужен Range. Я сохраняю значения% через список DropDown, который имеет от 0% до 100%, например, если я выбираю 20% из DropDown, он должен хранить в моей БД как 20%, и то же самое должно отображаться в моем GridView, но я получаю его 2 в БД и 200% в моем представлении сетки.Отображение процентных значений в gridview

Я знаю, что где-то есть небольшая ошибка, но я не могу понять это. Я сохранил тип данных DB для Percnetage как Decimal (8,0). Нужна помощь парням.

Вот что я попробовал

код DropDownList ASPX

<asp:DropDownList ID="DrpPercentageComplete" runat="server" BackColor="LightBlue" 
BorderColor="Black" BorderWidth="1px" Font-Bold="True" Font-Names="Verdana" 
Font-Size="X-Small" DataTextFormatString="{0:0.# %}" ForColor="Black" Height="16px" 
                   onselectedindexchanged="DrpPercentageComplete_SelectedIndexChanged" 
style="text-align: center" Width="135px"> 
    <asp:ListItem Value="Please Select"></asp:ListItem> 
    <asp:ListItem Value="None"></asp:ListItem> 
    <asp:ListItem Value="0%">0%</asp:ListItem> 
    <asp:ListItem Value="10%">10%</asp:ListItem> 
    <asp:ListItem Value="20%">20%</asp:ListItem> 
    <asp:ListItem Value="30%">30%</asp:ListItem> 
    <asp:ListItem Value="40%">40%</asp:ListItem> 
    <asp:ListItem Value="50%">50%</asp:ListItem> 
    <asp:ListItem Value="60%">60%</asp:ListItem> 
    <asp:ListItem Value="70%">70%</asp:ListItem> 
    <asp:ListItem Value="80%">80%</asp:ListItem> 
    <asp:ListItem Value="90%">90%</asp:ListItem> 
    <asp:ListItem Value="100%">100%</asp:ListItem> 
    </asp:DropDownList> 

GridView TemplateField ASPX код Процент

<asp:TemplateField HeaderText="% Complete"> 
<ItemTemplate> 
<asp:Label ID="PercentageComplete" runat="server" Font-Names="Verdana" 
Font-Size="X-Small" Height="30px" Text='<%# Eval("PercentageComplete","{0:0.#%}")%>'   Width="100px"> 
</asp:Label> 
</ItemTemplate> 
<FooterStyle BackColor="LightSlateGray" /> 
<HeaderStyle BackColor="LightSlateGray" ForeColor="White" Width="109px" /> 
<ItemStyle HorizontalAlign="Center" VerticalAlign="Middle" /> 
</asp:TemplateField> 

aspx.cs код добавления значения DDL

protected void BtnAdd_Click(object sender, EventArgs e) 
    { 
     MTMSDTO objc = new MTMSDTO(); 

      int Flag = 0; 

      objc.TaskName = TxtTaskName.Text; 
      objc.ClientName = DrpClientName.SelectedItem.Text; 

      string date; 
      date = Convert.ToDateTime(TxtBeginDate.Text).ToString("dd/MM/yyyy"); 

      DateTime dt = new DateTime(); 
      dt = Convert.ToDateTime(date); 

      objc.BeginDate = dt; 
      objc.DueDate = Convert.ToDateTime(TxtDueDate.Text); 
      objc.Description = TxtDescription.Text; 
      objc.AssignBy = LblAssignBy.Text; 
      objc.AssignTo = DrpAssignTo.SelectedItem.Text; 
      objc.Status = DrpStatus.SelectedItem.Text; 
      objc.PercentageComplete = Convert.ToInt32(DrpPercentageComplete.Text); 

      int X = obj.InsertTask(objc); 
      { 
       if (X >= 0) 
       { 
        Flag = 1; 
       } 
       else 
       { 
        Flag = 0; 
       } 
      } 

      if (Flag == 1) 
      { 
       LblSuccess.Visible = true; 
       LblSuccess.Text = "Data Added Successfully"; 
      } 
      else 
      { 
       LblErr.Visible = true; 
       LblErr.Text = "Failed To Add Data!!!"; 
      } 
    } 

private Decimal _PercentageComplete; 

    public Decimal PercentageComplete 
    { 
     get { return _PercentageComplete; } 
     set { _PercentageComplete = value; } 
    } 

public int InsertTask(MTMSDTO M) 
    { 
     DBAccess db = new DBAccess(); 

     SqlParameter objParam = new SqlParameter("@TaskID", M.TaskID); 
     objParam.Direction = ParameterDirection.Output; 

     db.Parameters.Add(new SqlParameter("@Task_Name", M.TaskName)); 
     db.Parameters.Add(new SqlParameter("@Client_Name", M.ClientName)); 
     db.Parameters.Add(new SqlParameter("@Begin_Date", M.BeginDate)); 
     db.Parameters.Add(new SqlParameter("@Due_Date", M.DueDate)); 
     db.Parameters.Add(new SqlParameter("@Description_A", M.Description)); 
     db.Parameters.Add(new SqlParameter("@Assign_By", M.AssignBy)); 
     db.Parameters.Add(new SqlParameter("@Assign_To", M.AssignTo)); 
     db.Parameters.Add(new SqlParameter("@Status_S", M.Status)); 
     db.Parameters.Add(new SqlParameter("@Percentage_Complete", M.PercentageComplete)); 
     db.Parameters.Add(objParam); 

     int retval = db.ExecuteNonQuery("InsertTask"); 

     if (retval >= 1) 
     { 
      return int.Parse(objParam.Value.ToString()); 
     } 
     else 
     { 
      return -1; 
     } 
    } 

хранимая процедура для вставки

ALTER PROCEDURE [dbo].[InsertTask] 


    @Task_Name nvarchar(50), 
    @Client_Name nvarchar(50), 
    @Begin_Date date, 
    @Due_Date date, 
    @Description_A nvarchar(50), 
    @Assign_By nvarchar(50), 
    @Assign_To nvarchar(50), 
    @Status_S nvarchar(50), 
    @Percentage_Complete decimal(18,0), 

    @TaskID bigint OUTPUT 

    As 

    Insert into dbo.Task 
    (
    TaskName, 
    ClientName, 
    BeginDate, 
    DueDate, 
    Description, 
    AssignBy, 
    AssignTo, 
    Status, 
    PercentageComplete 
    ) 

    Values 
    (
    @Task_Name, 
    @Client_Name, 
    @Begin_Date, 
    @Due_Date, 
    @Description_A, 
    @Assign_By, 
    @Assign_To, 
    @Status_S, 
    @Percentage_Complete 
    ) 

    Select @TaskID = SCOPE_IDENTITY() 

ответ

2

Вы можете просто сохранить значение в базе данных как десятичный/VARCHAR без каких-либо символов, то есть (%).
И GridView использования string.Concat добавить % символ после значения DB

код выглядит следующим образом:

<asp:Label ID="PercentageComplete" runat="server" Font-Names="Verdana" 
Text='<%# string.Concat(Eval("PercentageComplete"),"%") %>'> 

Отредактировано:

редактировать свои DROPDOWNLIST Markup как написано в коде ниже, СМСОА пытаются преобразовать его в int32 Вы не можете использовать %. Также вы можете иметь десятичное значение, так преобразовать его в десятичную

<asp:ListItem Value="0">0%</asp:ListItem> 
<asp:ListItem Value="10">10%</asp:ListItem> 
<asp:ListItem Value="20">20%</asp:ListItem> 
    ............. 
    ............ 
<asp:ListItem Value="100">100</asp:ListItem> 

кодекса За:

objc.PercentageComplete = Convert.ToDecimal(DrpPercentageComplete.SelectedValue); 
+1

paaji. . thnks для вышеуказанного кода .. я попробовал это ... проблема в том, что если я выберу любое значение от 0% до 100% от раскрывающегося списка, которое оно принимает как одну цифру. Я имею в виду, если я выберу 20%, это займет 2 в моей БД и то же самое отображается в Gridview ... 2% – Suraj

+0

@Suraj: Pls отправляет ваш код сервера, как вы вставляете значение ddl в DB –

+1

objc.PercentageComplete = Convert.ToInt32 (DrpPercentageComplete.Text); но его давая ошибку: входная строка не в правильном формате, и если я даю ToString или ToDecimal, ее высказывание не может преобразовать в любой из них – Suraj

3

Это лучший способ хранения процентных значений в БД.

Это decimal(p, s)

http://msdn.microsoft.com/en-us/library/ms187746.aspx

+1

Thnks за ответ ... но им хранящие как д же образом десятичную (р, s) .. но не может получить необходимое значение ... – Suraj

+1

Попробуйте прочитать этот http: // stackoverflow.com/questions/1602318/what-should-be-the-best-way-to-store-a-percent-value-in-sql-server – coder

+1

Я следил за тем же вопросом и пробовал форматировать свой код sir :) – Suraj

0

Вы должны сохранить значения без Simbol в дБ, в качестве знака после запятой. При необходимости формата в UI, кал ToString и использовать Rigth формат процент:

1 ("P", en-US) -> 100.00 % 

1 ("P", fr-FR) -> 100,00 % 

-0.39678 ("P1", en-US) -> -39.7 % 

-0.39678 ("P1", fr-FR) -> -39,7 % 

http://msdn.microsoft.com/es-es/library/dwhawy9k.aspx http://msdn.microsoft.com/es-es/library/dwhawy9k.aspx#PFormatString