0

我有一個datagrid,每行都有公司員工的信息。 我想讓每一行都能顯示/隱藏額外的信息。我的第一個想法是從AJAX工具包使用CollapsiblePanelExtender,並有每行是這樣的:ASP.NET在Datagrid行中顯示/隱藏段

<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> 

這工作得很好,但它可以是計算昂貴的。額外的信息面板有很多文本框/標籤,所有這些都從數據庫中獲取它的值。 每次頁面加載所有數據都是從數據庫中獲取的,其中一些數據是隱藏的。

有沒有更好的方法來實現我的目標?或者有什麼辦法只在點擊顯示/隱藏按鈕時才加載員工額外的詳細信息?

提前致謝!

回答

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(); 

希望這會有所幫助。 克勞迪婭

+0

謝謝克勞迪婭, 你的方式是一個更容易,更合理的完成目標的方式。但我希望允許編輯/查看沒有彈出窗口的地方等。 我已經使用您的模板來顯示/隱藏每一行中的面板,它的工作原理,但非常笨重。 有沒有其他人有更好的主意,或者我只是更好地沿着莫代爾彈出的路線? – 2010-04-12 14:23:29

+0

最後,我使用了ModalPopupExtender,它只是簡單得多,而且您對它有更多的控制權。 謝謝克勞迪婭的建議。 – 2010-04-13 11:25:30

+0

非常歡迎。樂於幫助。 – Claudia 2010-04-14 15:52:49