2012-05-28 19 views
9

Potrzebuję pobrać wartość komórki ze zdarzenia RowCommand, ale wartość nie znajduje się w parametrze PrimaryKeyNames w GridView.Uzyskaj wartość komórki GridView w wierszu polecenia RowCommand

Obecnie mam:

if (e.CommandName == "DeleteBanner") 
     { 
      GridViewRow row = gvCurrentPubBanner.SelectedRow; 
      string BannerName = row.Cells[1].Text; 

To nie działa (indeks z błędem zakresów), ja również próbowałem:

int index = Convert.ToInt32(e.CommandArgument); 
GridViewRow row = gvCurrentBanners.Rows[index]; 

To nie działa albo jako CommandArgument (identyfikator banera) nie jest identyfikatorem wiersza.

Odpowiedz

10
Dim row As GridViewRow = CType(CType(e.CommandSource, Control).NamingContainer, GridViewRow) 

Następnie zdobądź klucz lub pobierz komórkę i odlaj na pole danych.

Dim id As Guid = GridView1.DataKeys(row.RowIndex).Value 

Dim email As String = CType(row.Cells(2), DataControlFieldCell).Text 

Uwaga: działa to tylko w przypadku Boundfields.

+0

nie rozwiązanie z 'asp: TemplateField - ItemTemplate'? – Kiquenet

+0

refer @ chưa biết odpowiedź dla pola Itemtemplate. –

1
protected void GridView1_RowCommand(object sender, GridViewCommandEventArgs e) 
    { 
     if (e.CommandName == "Edit_Mob") { 

     GridViewRow row = (GridViewRow (((ImageButton)e.CommandSource).NamingContainer); 

     int RowIndex = row.RowIndex; // this find the index of row 

     int varName1 = Convert.ToInt32(((Label)row.FindControl("lbl_mobile_id")).Text.ToString()); //this store the value in varName1 

     } 
    } 
3

wypróbować ten jeden ..

GridViewRow gvRow = (GridViewRow)(((ImageButton)e.CommandSource).NamingContainer); 
int rowIndex=gvRow.RowIndex 
+0

Nie widzę, jak to może działać, ponieważ tworzysz nowy GridviewRow, nie odwołując się do istniejącego w widoku siatki – Fandango68

2

Int indeks = Convert.ToInt32 (e.CommandArgument);

pracować tylko podczas korzystania z przycisku w Gridview jest

<Columns> 
    <asp:ButtonField ButtonType="Button" Text="Save" CommandName="Select" /> 
</Columns> 

ja nie wiem, to prawda, ale to działa na mnie

+2

To jest poprawne rozwiązanie, jak udokumentowano na [stronie MSDN na 'RowCommand'] (http: // msdn.microsoft.com/en-us/library/system.web.ui.webcontrols.gridview.rowcommand%28v=vs.110%29.aspx): _ Klasa ButtonField automatycznie wypełnia właściwość CommandArgument odpowiednią wartością indeksu._ – marapet

3

@Romil: Twój kod w języku C#:

protected void GridView1_RowCommand(object sender, GridViewCommandEventArgs e) 
{ 
    GridViewRow row = (GridViewRow)(((LinkButton)e.CommandSource).NamingContainer); 
    int id = (int)GridView1.DataKeys[row.RowIndex].Value; 
} 

(LinkButton jest przyciskiem w polu szablonu).

+1

Obowiązuje dla 'asp: TemplateField - ItemTemplate' – Kiquenet

Powiązane problemy