0

各行に会社の従業員に関する情報があるデータグリッドがあります。各行に追加情報を表示/非表示にできるようにしたいと思います。私の最初のアイデアは、AJAXツールキットのCollapsiblePanelExtenderを使用して、各行を次のようにすることでした。

<ajaxtoolkit:collapsiblepanelextender
     TargetControlID="panel2">
     ExpandControlID="LinkButton1"
     CollapseControlID="LinkButton1">
</ajaxtoolkit:collapsiblepanelextender>

<asp:panel>
    FirstName | LastName | Phone | Email
    <LinkButton1>  <- this hides/show extra info in panel2
</asp:panel>

<asp:panel2>
     <textbox ="FirstName">
     <textbox ="LastName">
     <textbox ="EmailName">
     ...
     ...lots of textboxes where information is assigned from the database.
</asp:panel2>

これは非常にうまく機能しますが、計算コストが高くなる可能性があります。追加情報パネルには多くのテキストボックス/ラベルがあり、それらはすべてデータベースから値を取得します。ページが読み込まれるたびに、最初にデータベースからすべてのデータが取得され、一部は非表示になります。

私の目標を達成するためのより良い方法はありますか?または、[表示/非表示]ボタンがクリックされたときに従業員の追加の詳細のみをロードする方法はありますか?

前もって感謝します!

4

1 に答える 1

1

私はこのようなことをしましたが、ModalPopupExtenderを使用しました。テキストボックスとラベルが付いたパネルがあり、ユーザーが画像ボタンを押したときにのみ情報を取得します。この例では、imagebuttonはGridViewRowにあり、データを取得するためのキーはRowのDataKeysプロパティにありました。

GridViewRow row = ((GridViewRow)((ImageButton)sender).NamingContainer);
//NamingContainer return the container that the control sits in
DataKey key = ((GridView)row.NamingContainer).DataKeys[row.RowIndex];

//Retrieve data with a server method. It can be with wathever you want, I use an ArrayList
ArrayList AL=Domain.GetCustomerData(key[0].ToString());

//Fill controls with data, 
LblDate.Text = AL[0].ToString();
dLectHidro.Value = AL[1].ToString();
idLectHL.Value = AL[2].ToString();
LblEstacion.Text = HttpUtility.HtmlDecode(AL[3].ToString());
TxtLluvia.Text = HttpUtility.HtmlDecode(AL[4].ToString());
TxtLluvia1.Text = HttpUtility.HtmlDecode(AL[5].ToString());

//Show the popup
this.ModalPopupModif.Show();

お役に立てれば。クラウディア

于 2010-04-09T18:18:33.950 に答える