2013-06-21 10 views
5

Mam radgrid, w którym ukrywam kolumnę Id. Teraz chcę uzyskać jego wartość w kliknięciu linku. Jeśli kolumna jest widoczna, działa dobrze, ale pokazuje wartość pustą, gdy jest niewidoczna. mój kod toUzyskaj wartość ukrytej kolumny radgridowego telerika w asp.net

protected void RadGrid1_ItemCommand(object sender, Telerik.Web.UI.GridCommandEventArgs e) 
{ 
    if (e.CommandName == "Detail") 
    { 
     GridDataItem dataItm = e.Item as GridDataItem; 

     string value = dataItm["Id"].Text; 
    } 
} 
+1

można wysłać swój kod html, proszę – Sora

+0

http://www.telerik.com/forums/breaking-change-hidden-column-cell-text-is-not-persried-in-viewstate – Chiramisu

Odpowiedz

16

Spróbuj z poniższym fragmencie kodu.

ASPX

<telerik:RadGrid ID="RadGrid1" runat="server" AutoGenerateColumns="false" OnNeedDataSource="RadGrid1_NeedDataSource" 
    OnItemCommand="RadGrid1_ItemCommand"> 
    <MasterTableView DataKeyNames="ID"> 
     <Columns> 
      <telerik:GridBoundColumn DataField="ID" UniqueName="ID" HeaderText="ID"> 
      </telerik:GridBoundColumn> 
      <telerik:GridBoundColumn DataField="ID" UniqueName="ID1" HeaderText="ID" Visible="false"> 
      </telerik:GridBoundColumn> 
      <telerik:GridBoundColumn DataField="ID" UniqueName="ID2" HeaderText="ID" Display="false"> 
      </telerik:GridBoundColumn> 
      <telerik:GridTemplateColumn> 
       <ItemTemplate> 
        <asp:Button ID="Button1" runat="server" CommandName="Detail" CommandArgument='<%# Eval("ID") %>' /> 
       </ItemTemplate> 
      </telerik:GridTemplateColumn> 
     </Columns> 
    </MasterTableView> 
</telerik:RadGrid> 

ASPX.CS

protected void RadGrid1_NeedDataSource(object sender, GridNeedDataSourceEventArgs e) 
{ 
    dynamic data = new[] { 
     new { ID = 1, Name ="Name1"}, 
     new { ID = 2, Name = "Name2"}, 
     new { ID = 3, Name = "Name3"}, 
     new { ID = 4, Name = "Name4"}, 
     new { ID = 5, Name = "Name5"} 
    }; 

    RadGrid1.DataSource = data; 

} 

protected void RadGrid1_ItemCommand(object sender, GridCommandEventArgs e) 
{ 
    if (e.CommandName == "Detail") 
    { 
     GridDataItem item = e.Item as GridDataItem; 

     string strID = item.GetDataKeyValue("ID").ToString(); // We are able to get ID field value here 
     string strID1 = item["ID1"].Text; // We are NOT able to get ID field value here Because column is Visible false 
     string strID2 = item["ID2"].Text; // We are able to get ID field value here 
     string strCommandArgument = e.CommandArgument.ToString(); // We are able to get ID field value here 

    } 
} 

Proszę używać wyświetlacza nieruchomość w miejscu-of Visible nieruchomości.

+1

To jest najlepsze podejście. Zauważ, że używa Visible = "false" zamiast używać Display = "false". – msigman

1

Czy kolumna jest zawsze niewidoczna? Jeśli tak, to można umieścić identyfikator w nieruchomości DataKeyNames jak w:

DataKeyNames="ID" 

A potem do niego dostęp poprzez:

var id = (int)dataItm.getDataKeyValue("ID"); 
2

Najprostszym sposobem jest ustawienie Visible = true i Display = false, a wszystko powinno być w porządku.

+0

awansuj do tego. rzeczywiście jest najłatwiejszy i działa idealnie. – ddaniel