2013-07-17 2 views
2

В сетке я следующие колонкиКак заполнить текстовое поле со значением в столбце GridView строки

<Columns> 
    <asp:TemplateField HeaderText="select to pay"> 
     <ItemTemplate> 
      <asp:CheckBox ID="chkSelect" runat="server" OnCheckedChanged="chkSelect_OnCheckedChanged" AutoPostBack="true" /> 
     </ItemTemplate>    
    </asp:TemplateField> 

    <asp:BoundField DataField="Reference" HeaderText="Invoice" HeaderStyle-HorizontalAlign="Center" 
     ItemStyle-HorizontalAlign="Center">   
    </asp:BoundField> 

    <asp:BoundField DataField="ChargedDate" HeaderText="Date of charge" HeaderStyle-HorizontalAlign="Center" 
     ItemStyle-HorizontalAlign="Center" DataFormatString="{0:MM-dd-yyyy}">    
    </asp:BoundField> 

    <asp:BoundField DataField="Amount" HeaderText="Amount" HeaderStyle-      HorizontalAlign="Center" ItemStyle-HorizontalAlign="Center"> 
     </asp:BoundField>  
    <asp:TemplateField HeaderText="Amount applied"> 
     <ItemTemplate> 
      <asp:TextBox ID="txtPayAmount" Width="80px" runat="server" AutoPostBack="true" /> 
     </ItemTemplate> 
     <ItemStyle HorizontalAlign="Center" /> 

    </asp:TemplateField> 
</Columns> 

enter image description here Пожалуйста, скажите, в сетке, если я выбрал флажок, значение суммы должен отображаться в текстовом поле той же строки. Если я проверил несколько флажков, значения должны отображаться в текстовых полях соответствующих флажков/строк. сумма должна отображаться в текстовом поле под сеткой. Что мне нужно писать в событии OnSelect_CheckedChanged?

+3

Я хотел бы использовать 'FooterTemplate' для общего ряда. Что означает «общая сумма той же строки»? Есть ли несколько значений в одной строке? –

+0

Привет Тим, я имею в виду, если бы я выбрал флажок первого столбца, он должен отобразить сумму в текстовом поле последнего столбца. если я проверил несколько флажков, эти суммы должны отображаться в соответствующих текстовых полях, их строки и сумма должны отображаться в текстовом поле «Нижнее». пожалуйста помогите. Спасибо заранее. – Sanjeev4evr

+0

Я все еще смущен тем, что вы просите. Я вижу только один CheckBox в вашем коде, но вы говорите о проверке более одного. Будет ли другая checkBox находиться в нашей сетке или за ее пределами? Возможно, вы могли бы добавить какой-то пример (снятый снимок экрана, или еще какая-то разметка, или просто более четкое объяснение). – jadarnel27

ответ

0

В OnCheckedChanged случае он должен быть

protected void chkSelect_OnCheckedChanged(object sender, EventArgs e) 
{ 
    String czTemp = String.Empty; 
    GridViewRow gr = (GridViewRow)((CheckBox)sender).Parent.Parent; 
    GridViewRow footer = grdDues.FooterRow; 

    TextBox txtAmount = (TextBox)gr.Cells[3].FindControl("txtPayAmount"); 
    TextBox txtAmountPaid = (TextBox)footer.FindControl("txtAmountPaid"); 
    double dbTotalAmt = Convert.ToDouble(txtAmountPaid.Text.Replace("$","").ToString()); 
    if(((CheckBox)sender).Checked) 
    { 
     txtAmount.Enabled = true; 
     czTemp = grdDues.Rows[gr.RowIndex].Cells[3].Text.ToString(); 
     txtAmount.Text = czTemp.ToString(); 
     dbTotalAmt = dbTotalAmt + Convert.ToDouble(czTemp); 
    } 
    else 
    { 
     txtAmount.Enabled = false; 
     czTemp = grdDues.Rows[gr.RowIndex].Cells[3].Text.ToString(); 
     dbTotalAmt = dbTotalAmt - Convert.ToDouble(czTemp); 
     txtAmount.Text = "0.00"; 
    } 
    txtAmountPaid.Text = dbTotalAmt.ToString("C");} 
0

Вы имеете в виду, что в сетке есть строки с одним флажком и столбцами текстового поля? Каждая строка содержит флажки и другие значения столбцов, как указано в коде и поле «Текст»? Приложите изображение/снимок экрана.

+0

Да Есть строки в сетке, каждая строка содержит флажок и другие значения, такие как счет-фактура, дата, сумма. Если я выберу флажок строки сетки, я должен отобразить сумму в текстовом поле той же строки. если я выберу несколько строк (флажки), я должен отобразить их значения количества в текстовом поле соответствующих строк, и вся сумма текстовых полей должна быть показана внизу текстового поля. – Sanjeev4evr

1

Пожалуйста, попробуйте приведенный ниже фрагмент кода.

ASPX

<asp:GridView ID="GridView1" runat="server" AutoGenerateColumns="false" DataKeyNames="TotalAmount" ShowFooter="true"> 
    <Columns> 
     <asp:TemplateField HeaderText="select to pay"> 
      <ItemTemplate> 
       <asp:CheckBox ID="chkSelect" runat="server" OnCheckedChanged="chkSelect_OnCheckedChanged" 
        AutoPostBack="true" /> 
      </ItemTemplate> 
     </asp:TemplateField> 
     <asp:TemplateField HeaderText="Amount"> 
      <ItemTemplate> 
       <%# Eval("TotalAmount", "{0:#,##0.00}")%> 
      </ItemTemplate> 
     </asp:TemplateField> 
     <asp:TemplateField HeaderText="Amount applied"> 
      <ItemTemplate> 
       <asp:TextBox ID="txtPayAmount" Width="80px" runat="server" /> 
      </ItemTemplate> 
      <FooterTemplate> 
       <asp:TextBox ID="TextBox1" Width="80px" runat="server" /> 
      </FooterTemplate> 
      <ItemStyle HorizontalAlign="Center" /> 
     </asp:TemplateField> 
    </Columns> 
</asp:GridView> 

ASPX.CS

public partial class Forum : System.Web.UI.Page 
{ 

    protected void Page_Init(object sender, System.EventArgs e) 
    { 
     GridView gv = new GridView(); 
     gv.ID = "GridView1"; 
     gv.AutoGenerateColumns = false; 
     gv.ShowFooter = true; 
     gv.DataKeyNames = new string[] { "TotalAmount" }; 

     TemplateField tf = new TemplateField(); 
     tf.ItemTemplate = new MyCustomTemplate(); 
     gv.Columns.Add(tf); 

     BoundField bf = new BoundField(); 
     bf.DataField = "TotalAmount"; 
     gv.Columns.Add(bf); 

     tf = new TemplateField(); 
     tf.ItemTemplate = new MyCustomTextTemplate(); 
     tf.FooterTemplate = new MyCustomFooterTextTemplate(); 
     gv.Columns.Add(tf); 

     this.form1.Controls.Add(gv); 
    } 

    protected void Page_Load(object sender, System.EventArgs e) 
    { 
     GridView gv = form1.FindControl("GridView1") as GridView; 
     if (!IsPostBack) 
     { 
      dynamic data = new[] { 
     new { ID = 1, Name = "Name1",TotalAmount= 10}, 
     new { ID = 2, Name = "Name2",TotalAmount= 20}, 
     new { ID = 3, Name = "Name3",TotalAmount= 30}, 
     new { ID = 4, Name = "Name4",TotalAmount= 40}, 
     new { ID = 5, Name = "Name5",TotalAmount= 50} 
    }; 

      gv.DataSource = data; 
      gv.DataBind(); 
     } 
    } 

    protected void Page_PreRender(object sender, System.EventArgs e) 
    { 

    } 


    protected void RadGrid1_NeedDataSource(object sender, GridNeedDataSourceEventArgs e) 
    { 
     dynamic data = new[] { 
       new { ID = 1, Name ="Name_1"}, 
       new { ID = 2, Name = "Name_2"}, 
       new { ID = 3, Name = "Name_3"}, 
       new { ID = 4, Name = "Name_4"}, 
       new { ID = 5, Name = "Name_5"} 
      }; 


    } 



} 

public class MyCustomTemplate : ITemplate 
{ 
    public void InstantiateIn(System.Web.UI.Control container) 
    { 
     CheckBox cb = new CheckBox(); 
     cb.ID = "chkSelect"; 
     cb.AutoPostBack = true; 
     cb.CheckedChanged += new EventHandler(cb_CheckedChanged); 
     container.Controls.Add(cb); 
    } 

    protected void cb_CheckedChanged(object sender, EventArgs e) 
    { 
     GridViewRow row = (sender as CheckBox).NamingContainer as GridViewRow; 
     TextBox txtPayAmount = row.FindControl("txtPayAmount") as TextBox; 

     if ((sender as CheckBox).Checked) 
     { 
      txtPayAmount.Text = Convert.ToString((row.Parent.Parent as GridView).DataKeys[row.RowIndex]["TotalAmount"]); 
     } 
     else 
     { 
      txtPayAmount.Text = string.Empty; 
     } 

     int TotalAmount = 0; 

     foreach (GridViewRow rowv in (row.Parent.Parent as GridView).Rows) 
     { 
      CheckBox chk = rowv.FindControl("chkSelect") as CheckBox; 
      if (chk.Checked) 
      { 
       TotalAmount += Convert.ToInt32((row.Parent.Parent as GridView).DataKeys[rowv.RowIndex]["TotalAmount"]); 
      } 
     } 

     GridViewRow rowf = (row.Parent.Parent as GridView).FooterRow; 

     ((TextBox)rowf.FindControl("TextBox1")).Text = TotalAmount.ToString(); 
    } 
} 

public class MyCustomTextTemplate : ITemplate 
{ 
    public void InstantiateIn(System.Web.UI.Control container) 
    { 
     TextBox cb = new TextBox(); 
     cb.ID = "txtPayAmount"; 
     container.Controls.Add(cb); 
    } 


} 

public class MyCustomFooterTextTemplate : ITemplate 
{ 
    public void InstantiateIn(System.Web.UI.Control container) 
    { 
     TextBox cb = new TextBox(); 
     cb.ID = "TextBox1"; 
     container.Controls.Add(cb); 
    } 


} 
+0

Что делать, если данные в сетке динамически генерируются. – Sanjeev4evr

+0

Значит, вы хотите создать сетку, используя код C#, правильно? –

+0

Да, я динамически заполняю сетку из базы данных с помощью кода C#. Затем обработайте функциональность, как я объяснил выше. Из приведенного выше кода, который вы упомянули, я не получаю никаких значений в переменных, таких как TotalAmount. – Sanjeev4evr

0

Я вы хотите сделать это с помощью JavaScript, пожалуйста, попробуйте это.

 $(function() { 
     $('input:checkbox').click(function (e) { 
      calculateSum(5); // sum of 5th column 
     }); 

     function calculateSum(colidx) { 
      total = 0.0; 
      $("tr:has(:checkbox:checked) td:nth-child(" + colidx + ")").each(function() { 
       var Tot = ($(this).text()); 
       Tot = parseFloat(Tot.replace(/,/g, '')); 
       total += Tot; 
      }); 
      $("#<%=txtTotalAmt.ClientID %>").val(total).toFixed(2); 
     } 
    }); 
Смежные вопросы