ID | Asunto | Fecha | Nick | |
39017 | Definir orden de un Select en LINQ | 04/03/08 22:15 | erickorlando | | |
Hola Guille: Quiero ir al grano en este tema de Linq, me he dado cuenta de que el orden que establece el LINQ es en orden alfabetico, por ejemplo en este codigo: Dim northwind As New NorthwindDataContext Dim cust = From c In northwind.Customers _ Where c.CompanyName.StartsWith(txtFind.Text) _ Order By c.CustomerID, c.CompanyName, c.ContactName _ Select New With {Key .Cliente = c.CustomerID, _ Key .Compañia = c.CompanyName, _ Key .Contacto = c.ContactName} DataGridView1.DataSource = cust Me muestra los campos en Orden Alfabetico, x eso tuve que colocar los campos de esta manera, pero existe alguna forma de obtener un select distinto? Porque la verdad me rompo la cabeza como lograrlo y no encuentro esta informacion en el MSDN. Gracias de antemano. Erick ORlando © |
|
ID | Asunto | Fecha | Nick | |
39019 | Re: Definir orden de un Select en LINQ (Resp: 39017) | 04/03/08 22:45 | elGuille [MVP] | | |
No te entiendo... ¡Espera! ¿te refieres a que te ordena los campos indicados en el Select por el orden alfabético de los nombres de los campos? Si es eso, el problema es del GridView, no de LINQ. Aunque si lo miramos "correctamente" es cosa del GridView con VB, ya que, (creo) con C# no ocurre. El problema es que se ordenan los nombres de las propiedades del tipo anónimo que se genera en el Select. Déjame que lo mire y te comento si encuentro algo... (seguramente lo publique en mi sitio, ya que ese tema no lo he contemplado en mi nuevo libro, ya ya no se puede incluir... je, je.     elGuille
Si esta respuesta resuelve tu duda, por favor pulsa en la de este mensaje. Gracias. |
|
ID | Asunto | Fecha | Nick | |
39020 | Re: Definir orden de un Select en LINQ (Resp: 39017) | 04/03/08 23:06 | elGuille [MVP] | | |
Para el que no sepa a qué se refiere erickorlando. Cuando haces el Select de forma normal, por ejemplo: Select c.CustomerID, c.CompanyName, c.ContactName En el GridView las columnas no se muestran en ese orden, es decir, en ves de mostrar: CustomerID | CompanyName | ContactName Lo muestra así: CompanyName | ContactName | CustomerID Es decir, el gridView clasifica las propiedades del tipo anónimo creado en el Select y por eso erickorlando ha tenido que crear un tipo anónimo con el orden de las columnas que quiere. En realidad el Select se podía haber creado así: Select Cliente = c.CustomerID, _
Compañia = c.CompanyName, _
Contacto = c.ContactName Y como el GridView usa las columnas por orden alfabético "del nombre de la propiedad", pues, muestra esas columnas en este orden: Cliente | Compañia | Contacto Es decir, no porque él haya puesto ese orden, sino porque "coincide" que de esa forma están las columnas (o propiedades del tipo anónimo) ordenadas. Si quieres saber más de estas cosas de LINQ y VB, no puedes perderte mi nuevo libro (tengo que aprovechar cualquier ocasión para hacer publicidad, je, je) http://www.elguille.info/NET/NovedadesVB9/Default.aspx    elGuille
Si esta respuesta resuelve tu duda, por favor pulsa en la de este mensaje. Gracias. |
|
ID | Asunto | Fecha | Nick | |
39024 | Re: Definir orden de un Select en LINQ (Resp: 39017) | 04/03/08 23:52 | elGuille [MVP] | | |
Creo que la única solución es que (o uses C#, je, je) o crees las columnas manualmente: Dim cust = From c In northwind.Customers _
Where c.CompanyName.StartsWith(txtBuscar.Text) _
Order By c.CustomerID, c.CompanyName, c.ContactName _
Select c.CustomerID, c.CompanyName, c.ContactName
DataGridView1.AutoGenerateColumns = False
DataGridView1.Columns.Clear()
DataGridView1.Columns.Add("CustomerID", "CustomerID")
DataGridView1.Columns.Add("CompanyName", "CompanyName")
DataGridView1.Columns.Add("ContactName", "ContactName")
DataGridView1.Columns(0).DataPropertyName = "CustomerID"
DataGridView1.Columns(1).DataPropertyName = "CompanyName"
DataGridView1.Columns(2).DataPropertyName = "ContactName"
DataGridView1.DataSource = cust El segundo valor del método Add es lo que se muestra en la columna. Y lo importante es la asignación a DataPropertyName, ya que ese es el nombre de la columna de los datos que quieres mostrar en esa columna. Por supuesto, ese nombre debe coincidir con el de la propiedad indicada en el Select. Y toda esa creación de columnas, el Clear, etc. solo hay que hacerlo cuando se quieran mostrar esos datos, es decir, que si siempre vas a usar ese DataGridView con esas columnas, pues... no es necesario que lo hagas siempre, lo puedes poner en el Form_Load, por ejemplo. Private Sub Form1_Load() Handles MyBase.Load
DataGridView1.AutoGenerateColumns = False
DataGridView1.Columns.Clear()
DataGridView1.Columns.Add("CustomerID", "CustomerID")
DataGridView1.Columns.Add("CompanyName", "CompanyName")
DataGridView1.Columns.Add("ContactName", "ContactName")
DataGridView1.Columns(0).DataPropertyName = "CustomerID"
DataGridView1.Columns(1).DataPropertyName = "CompanyName"
DataGridView1.Columns(2).DataPropertyName = "ContactName"
End Sub
Private Sub btnBuscar3_Click() Handles btnBuscar3.Click
Dim northwind As New NorthwindDataContext
Dim cust = From c In northwind.Customers _
Where c.CompanyName.StartsWith(txtBuscar.Text) _
Order By c.CustomerID, c.CompanyName, c.ContactName _
Select c.CustomerID, c.CompanyName, c.ContactName
DataGridView1.DataSource = cust
End Sub     elGuille
Si esta respuesta resuelve tu duda, por favor pulsa en la de este mensaje. Gracias. |
|
ID | Asunto | Fecha | Nick | |
39028 | Re: Definir orden de un Select en LINQ (Resp: 39024) | 05/03/08 03:02 | elGuille [MVP] | | |
Si esta respuesta resuelve tu duda, por favor pulsa en la de este mensaje. Gracias. |
|
ID | Asunto | Fecha | Nick | |
39107 | Re: Definir orden de un Select en LINQ (Resp: 39028) | 06/03/08 12:53 | erickorlando | | |
Mil Gracias Guille, tambien estuve pensando en eso de definir el orden de las columnas "a mano" y justo me has dado la razon, gracias por tu colaboracion. Y creo q no sea inconveniente que no lo hayas publicado en tu libro acerca de este tema, ya que es obvio que un libro (por mas extenso que sea) jamas podra acaparar todos los "x menores" de la programacion. Saludos desde Peru Erick ORlando ©
Si esta respuesta resuelve tu duda, por favor pulsa en la de este mensaje. Gracias. |
|
ID | Asunto | Fecha | Nick | |
39108 | Re: Definir orden de un Select en LINQ (Resp: 39107) | 06/03/08 13:04 | elGuille [MVP] | | |
Sí, es que creo que no hay más alternativas (o al menos yo no las conozco), el problema de redefinir los campos del DataGridView (que también se puede hacer en modo diseño), es que debes tener cuidado de no añadir nuevas columnas, ya que entonces te las muestra todas, las que había más las que añadas. Y sí, es prácticamente imposible añadir todos los temas en un libro... por muy electrónico que sea (por aquello de que el número de páginas no influye tanto en el precio como en uno de "papel"), je, je.     elGuille
Si esta respuesta resuelve tu duda, por favor pulsa en la de este mensaje. Gracias. |
|
ID | Asunto | Fecha | Nick | |
39118 | Re: Definir orden de un Select en LINQ (Resp: 39108) | 06/03/08 16:37 | erickorlando | | |
Si se puede Guille!!!, curioseando con las propiedades del DataGridView, puedes hacer lo siguiente: Dim cust = From c In northwind.Customers _
Where c.CompanyName.StartsWith(txtFind.Text) _
Order By c.CustomerID, c.CompanyName, c.ContactName _
Select c.CustomerID, c.ContactName, c.ContactTitle
dgvCust.DataSource = cust
dgvCust.Columns("CustomerId").DisplayIndex = 0 Esa bendita propiedad DisplayIndex de una coleccion DataGridViewColumnCollection es el que determina en que orden quieres que se muestre la columna, obviamente el 0 es el primero, el 1 es el segundo y asi sucesivamente. Con esto ya me ahorro los quebraderos de cabeza por cada consulta que tendria que hacer en las distintas tablas de mi aplicación. Gracias Guille por la "iluminacion" que sin ti no lo hubiese logrado. Saludos desde Peru Erick ORlando ©
Si esta respuesta resuelve tu duda, por favor pulsa en la de este mensaje. Gracias. |