Thursday, March 3, 2011

Datatable y DataKeyNames

DataKeyNames permite agregarle un array de campos llaves que se usarán para seleccionar un registro dentro del datatable. Al menos yo lo utilizo para hacer un select con esa llave o conjunto de llaves. Solía usar siempre solo un item para el array. Pero cuando me tocó usar más de uno, no supe hacerlo. Pero ya lo hice, jajaja :p Es sencillo, es com sigue:

Por ejemplo, cuando sólo era uno, por código yo lo llenaba así:
Me.grvResultado.DataKeyNames = New String() {Me.pNombrePrimaryKey}

Pero cuando me tocó llenar con más de uno, fue asi:

Me.grvResultado.DataKeyNames = New String() {Me.strNombrePrimaryKey, Me.strKeySecundaria}

(Sin embargo, si lo querés hacer por diseño, podes seleecionar tu gridview, ir a sus propiedades y en donde dice: "DataKeyNames", agregar los campos llaves separados por coma.)

En el evento de tu gridview RowDataBound, hay que llenar el CommandArgument

If e.Row.RowType = DataControlRowType.DataRow Then
Dim lnkSeleccionar As LinkButton = CType(e.Row.Cells(0).Controls(0), LinkButton)
lnkSeleccionar.CommandArgument = Me.grvResultado.DataKeys(e.Row.RowIndex).Values(0) & "," & Me.grvResultado.DataKeys(e.Row.RowIndex).Values(1)
End If

El Values(0) es el primer campo llave, el Values(1) es segundo, y así sucesivamente. Fijate que están separados por coma.

Luego en el evento de tu gridview RowCommand, desglosas tu array de llaves.

Dim valores() As String = e.CommandArgument.ToString().Split(",")
Dim valor1 As String = valores(0)
Dim valor2 As String = valores(1)

Y mi Select sería así:

dt.Select(Me.strNombrePrimaryKey & "=" & valor1 & " AND " & Me.strKeySecundaria & "=" & valor2)

Happy Codding =)

No comments:

Post a Comment