0

最初に私のグリッドビューは1つのデータにバインドされ、ユーザーが[追加]ボタンをクリックすると、jqueryによって一度に1行ずつグリッドビューに追加されます。私のコードは正常に動作していますが、jquery によってクライアント側から gridview に 5 行を追加し、サーバー側からそれらの行を反復しようとすると、GridView1.Rows.Count常に 1 行が返されるという問題があります。だから私の問題は、jqueryによってクライアント側から行が追加されたときに、サーバー側から行コレクションを反復できないことです。したがって、ここでコード全体を提供し、jquery で行を追加した後、サーバー側からすべての行を読み取ることができる結果として何ができるかを教えてください。

ASPX

<script>
     $(document).ready(function () {
        $("#datepicker").datepicker({ 
            dateFormat: 'dd/mm/yy',
            showOn: "both",
            buttonImageOnly: true,
            buttonImage: "images/date_picker.gif",
            buttonText: "Calendar"
         });


        $('#<%=btnAdd.ClientID %>').bind('click', function (event) {
            var $grid = $('#<%=GridView1.ClientID %>');
            var $row = $grid.find('tr:last').clone().appendTo($grid);
            $row.find('select')[0].selectedIndex = 0;
            return false;
        });
    });
</script>

<asp:Button ID="btnAdd" Text="Add More" runat="server" /><br />
<asp:GridView ID="GridView1" runat="server" AutoGenerateColumns="False" ShowHeader="False">
       <Columns>
           <asp:TemplateField>
               <ItemTemplate>
                   <asp:DropDownList ID="ddlCountry" runat="server">
                    <asp:ListItem>--Select--</asp:ListItem>
                    <asp:ListItem>India</asp:ListItem>
                    <asp:ListItem>UK</asp:ListItem>
                    <asp:ListItem>USA</asp:ListItem>
                    <asp:ListItem>Germany</asp:ListItem>
                </asp:DropDownList>



    <asp:DropDownList ID="ddlCity" runat="server">
                    <asp:ListItem>--Select--</asp:ListItem>
                    <asp:ListItem>Kolkata</asp:ListItem>
                    <asp:ListItem>Mumbai</asp:ListItem>
                    <asp:ListItem>Delhi</asp:ListItem>
                    <asp:ListItem>Madras</asp:ListItem>
                </asp:DropDownList>
               </ItemTemplate>
           </asp:TemplateField>
       </Columns>
   </asp:GridView>
<br /><br />
<asp:Button ID="Button1" Text="Read gridview Value" runat="server" 
    onclick="Button1_Click" /><br />

サーバー側コード

protected void Page_Load(object sender, EventArgs e)
        {
            if (!IsPostBack)
            {
                DataTable dt = new DataTable();
                dt.Columns.Add("ID", typeof(string));
                DataRow dr = dt.NewRow();
                dr["ID"] = "";
                dt.Rows.Add(dr);
                GridView1.DataSource = dt;
                GridView1.DataBind();
            }
        }

        protected void Button1_Click(object sender, EventArgs e)
        {
            StringBuilder sb=new StringBuilder();

            //HtmlTable table = (HtmlTable)rpt.Items[0].FindControl("tblSample");

            for (int i = 0; i <= GridView1.Rows.Count - 1; i++)
            {
                string country = ((DropDownList)GridView1.Rows[i].FindControl("ddlCountry")).SelectedItem.Text;
                string city = ((DropDownList)GridView1.Rows[i].FindControl("ddlCity")).SelectedItem.Text;
                sb.Append("Country :- " + country + "  City :- " + city);
            }
            txtData.Text = sb.ToString();
        }
4

1 に答える 1

2

JavaScript から追加されたサーバー コードの行を読み取ることができません。代わりに、サーバー コードから行を追加する必要があります。ボタンをクリックすると、サーバーへのポストバックが発生するためです。JavaScript コードに追加された行は、viewstate を使用してレンダリングされません。ビューステートには追加されません。そのため、ポストバックではレンダリングされません。そのため、javascript に追加することはできません。ディスプレイ目的でのみ使用できます。この種のアクションには ajax 部分ポストバックを使用できます。更新パネルとそのトリガープロセスで完了しました。

クラスモデルの詳細については、このURLを使用してください

于 2013-02-27T11:20:33.150 に答える