Ver Mensaje Individual
  #1 (permalink)  
Antiguo 31/07/2005, 17:28
saz83
 
Fecha de Ingreso: julio-2005
Mensajes: 2
Antigüedad: 18 años, 9 meses
Puntos: 0
usando dropdownlist en un datagrid

hola a todos, espero ke alguno pueda ayudarme. estoy empezando a aprender a programar en asp.net web matrix y encontre un codigo el cual permite usar dropdownlist en un datagrid y editarlo, solo ke al correrlo, no me realiza el cambio, y hay problemas con el if ispostback, aki lo dejo y espero ke alguien pueda copiarlo,pegarlo y ejecutarlo y me sepa dar solucion, de antemano gracias al ke atienda esta peticion. lo hare en 2 partes debido a ke es algo extenso.

<%@ Import Namespace="System.Data" %>
<%@ Import Namespace="System.Data.SqlClient" %>

<html>


<script language="VB" runat="server">

Dim MyConnection As SqlConnection
Public StateIndex As Hashtable

Sub Page_Load(Src As Object, E As EventArgs)

MyConnection = New SqlConnection("server=(local)\NetSDK;database=pubs ;Trusted_Connection=yes")

If Not (IsPostBack)
BindGrid()
End If

StateIndex = New Hashtable()
StateIndex("CA") = 0
StateIndex("IN") = 1
StateIndex("KS") = 2
StateIndex("MD") = 3
StateIndex("MI") = 4
StateIndex("OR") = 5
StateIndex("TN") = 6
StateIndex("UT") = 7
End Sub

Public Function GetStateIndex(StateName As String) As Integer

If StateIndex(stateName) <> Nothing
Return CInt(StateIndex(stateName))
Else
Return 0
End If
End Function

Sub MyDataGrid_Edit(Sender As Object, E As DataGridCommandEventArgs)

MyDataGrid.EditItemIndex = CInt(E.Item.ItemIndex)
BindGrid()
End Sub

Sub MyDataGrid_Cancel(Sender As Object, E As DataGridCommandEventArgs)

MyDataGrid.EditItemIndex = -1
BindGrid()
End Sub

Sub MyDataGrid_Update(Sender As Object, E As DataGridCommandEventArgs)

Dim DS As DataSet
Dim MyCommand As SqlCommand

Dim UpdateCmd As String = "UPDATE Authors SET au_id = @Id, au_lname = @LName, au_fname = @FName, phone = " _
& " @Phone, address = @Address, city = @City, state = @State, zip = @Zip, contract = @Contract where au_id = @Id"

MyCommand = New SqlCommand(UpdateCmd, MyConnection)

MyCommand.Parameters.Add(New SqlParameter("@Id", SqlDbType.NVarChar, 11))
MyCommand.Parameters.Add(New SqlParameter("@LName", SqlDbType.NVarChar, 40))
MyCommand.Parameters.Add(New SqlParameter("@FName", SqlDbType.NVarChar, 20))
MyCommand.Parameters.Add(New SqlParameter("@Phone", SqlDbType.NChar, 12))
MyCommand.Parameters.Add(New SqlParameter("@Address", SqlDbType.NVarChar, 40))
MyCommand.Parameters.Add(New SqlParameter("@City", SqlDbType.NVarChar, 20))
MyCommand.Parameters.Add(New SqlParameter("@State", SqlDbType.NChar, 2))
MyCommand.Parameters.Add(New SqlParameter("@Zip", SqlDbType.NChar, 5))
MyCommand.Parameters.Add(New SqlParameter("@Contract", SqlDbType.NVarChar,1))

MyCommand.Parameters("@Id").Value = MyDataGrid.DataKeys(CInt(E.Item.ItemIndex))

Dim Cols As String() = {"LName","FName","Phone","Address","City","Zip" }

Dim I As Integer
For I = 0 To 5

Dim CurrentTextBox As TextBox
CurrentTextBox = E.Item.FindControl("edit_" & Cols(I))
Dim ColValue As String = CurrentTextBox.Text

' Check for null values in required fields
If I<3 And ColValue = ""

Message.InnerHtml = "ERROR: los campos Nombre o Teléfono no admiten valores nulos"
Message.Style("color") = "red"
Return
End If

MyCommand.Parameters("@" & Cols(I)).Value = ColValue
Next

Dim StateDropDownList As DropDownList
StateDropDownList = E.Item.FindControl("edit_State")
MyCommand.Parameters("@State").Value = StateDropDownList.SelectedItem.ToString()

Dim ContractCheckBox As CheckBox
ContractCheckBox = E.Item.FindControl("edit_Contract")

If ContractCheckBox.Checked = true
MyCommand.Parameters("@Contract").Value = "1"
Else
MyCommand.Parameters("@Contract").Value = "0"
End If

MyCommand.Connection.Open()

Try
MyCommand.ExecuteNonQuery()
Message.InnerHtml = "<b>Registro actualizado</b><br>" & UpdateCmd
MyDataGrid.EditItemIndex = -1
Catch Exp As SqlException
If Exp.Number = 2627
Message.InnerHtml = "ERROR: ya existe un registro con la misma clave principal"
Else
Message.InnerHtml = "ERROR: no se pudo actualizar el registro, compruebe que los campos están rellenos correctamente"
End If
Message.Style("color") = "red"
End Try

MyCommand.Connection.Close()

BindGrid()
End Sub

Sub BindGrid()

Dim DS As DataSet
Dim MyCommand As SqlDataAdapter
MyCommand = new SqlDataAdapter("select * from Authors", MyConnection)

DS = new DataSet()
MyCommand.Fill(DS, "Authors")

MyDataGrid.DataSource=DS.Tables("Authors").Default View
MyDataGrid.DataBind()
End Sub

</script>

<body style="font: 10pt verdana">

<form runat="server">

<h3><font face="Verdana">Actualizar fila de datos con una columna con plantillas</font></h3>

<span id="Message" EnableViewState="false" style="font: arial 11pt;" runat="server"/><p>

<ASP:DataGrid id="MyDataGrid" runat="server"
Width="800"
BackColor="#ccccff"
BorderColor="black"
ShowFooter="false"
CellPadding=3
CellSpacing="0"
Font-Name="Verdana"
Font-Size="8pt"
HeaderStyle-BackColor="#aaaadd"
OnEditCommand="MyDataGrid_Edit"
OnCancelCommand="MyDataGrid_Cancel"
OnUpdateCommand="MyDataGrid_Update"
DataKeyField="au_id"
AutoGenerateColumns="false">