2011-07-21 9 views
0

Q:gridviewのテンプレートフィールドの問題

私は以下の問題を抱えています。本当にそれを修正する方法はわかりません。

私はgrid viewを持っています。列の1つはtemplate field(テキストボックス)です。グリッドビューは、8の行で構成されています。私が何をするかは、ユーザーがテキストボックスにデータを入力するたびに、最後のテキストボックス(enabled = falseを設定します)に合計を挿入します。テキストボックスのデータ入力をいくつかの方法で合計し、イベントで呼び出しますtext changed。しかし、テキストボックスに数値を入力してから、Tab in the keyboardをクリックするか、マウスカーソルを使用して次のボックスに移動します。フォーカスが失われ、マウスカーソルを再度入力する必要があります。

私は問題を解決するために次の方法を試みますが、無駄です。

foreach (GridViewRow r in gv_Evaluation.Rows) 
      { 
       ((RadTextBox)r.Cells[3].FindControl("txt_evaluateWeights")).Attributes.Add("blur", "calc()"); 
      } 

マイページロードでは、これはまったく機能しません。


protected void txt_evaluateWeights_TextChanged(object sender, EventArgs e) 
{ 
    calc(); 
    ((TextBox)sender).Focus(); 
} 

この方法では、データを入力するために、以前のテキストボックス(私はすでに行っているものを意味)ではない私はフォーカスをしたいテキストボックスにフォーカスを戻します。

EDIT:

マイカルク方法:サーバー側のポストバックを使用してそれをやって

private void calc() 
     { 
      float sum = 0; 
      for (int i = 0; i < 7; i++) 
      { 
       RadTextBox txt1 = (RadTextBox)gv_Evaluation.Rows[i].Cells[3].FindControl("txt_evaluateWeights"); 
       int weight; 
       bool result = Int32.TryParse(txt1.Text, out weight); 
       if (result) 
       { 
        sum += weight; 
       } 
      } 

      double percentage; 
      percentage = Math.Round((sum/100) * 100, 2); 
      RadTextBox txt3 = (RadTextBox)gv_Evaluation.Rows[7].Cells[3].FindControl("txt_evaluateWeights"); 
      txt3.Text = percentage.ToString();//string.Format("{0:0.0%}", percentage.ToString()); 

     } 
+1

を助け

GridViewの

<asp:GridView ID="DemoGrid" runat="server" AutoGenerateColumns="false" ShowFooter="true"> <Columns> <asp:TemplateField HeaderText="index"> <ItemTemplate><%# Container.DataItemIndex + 1 %></ItemTemplate> </asp:TemplateField> <asp:TemplateField HeaderText="Item"> <ItemTemplate> <asp:Label ID="DemoLabel" runat="server" Text='<%# Container.DataItem %>' /> </ItemTemplate> <FooterTemplate>Total</FooterTemplate> </asp:TemplateField> <asp:TemplateField HeaderText="Amount"> <ItemTemplate> <asp:TextBox ID="DemoText" runat="server" CssClass="quantity"> </asp:TextBox> </ItemTemplate> <FooterTemplate> <asp:Label ID="TotalLabel" runat="server" CssClass="result"/> </FooterTemplate> </asp:TemplateField> </Columns> </asp:GridView> 

ができていますあなたの 'calc'を投稿してください機能も? – naveen

+0

大丈夫............ –

+1

ポストバックしてサーバ側で合計を計算したいのですか、それともクライアント側で実行しますか?また、ページングが有効になっていて、クライアント側に行の一部がまったく存在しない場合の問題を考えましたか? 「最後のテキストボックスに合計を入れる」とはどういう意味ですか、行の最後のTextBoxまたはf.e.フッターに? –

答えて

1

がこれを行うの恐ろしい方法です。

代わりにJavaScriptを使用してください。ここではjQueryの小さな例では、あなたは

protected void Page_Load(object sender, EventArgs e){ 
    if (!IsPostBack) 
    { 
     string[] array = new string[] { "demo1", "demo2", "demo3", "demo4", "demo5" }; 
     DemoGrid.DataSource = array; 
     DemoGrid.DataBind(); 
    } 
} 

の背後にあるコードのJavaScript(jQueryの)

<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.6.2/jquery.min.js" type="text/javascript"></script> 
<script type="text/javascript"> 
    $(document).ready(function() { 
     $(".quantity").bind("blur", function() { 
      var $quantity = $(this); 
      var quantity = +$quantity.val(); //cast to number 
      if (!isNaN(quantity)) { 
       var $sum = $quantity.closest("table").find("tr:last .result"); 
       var sum = +$sum.html(); 
       $sum.html(sum + quantity); 
      } 
     }); 
    }); 
</script> 

ホープこれは