Foro de elhacker.net

Programación => .NET (C#, VB.NET, ASP) => Mensaje iniciado por: irvincnt93 en 8 Febrero 2015, 00:17 am



Título: abrir desde la fila de un Datagridview
Publicado por: irvincnt93 en 8 Febrero 2015, 00:17 am
hola comunidad, acudo una ves mas en su ayuda.
tengo un datagridview en c# ya lleno con los campos que selecciono en mi consulta, dentro de una celda tengo la dirección (path) de una imagen que también guarde y que ahora se me muestra en el datagritview, lo que quiero hacer es que al momento que le de clic en alguna parte de la fila de la imagen que quiero abrir me la abra.

e buscado en algunos foros y leo que process.star me sirve para ello, pero como le hago?


Título: Re: abrir desde la fila de un Datagridview
Publicado por: Eleкtro en 8 Febrero 2015, 09:30 am
Si no he entendido mal, tienes un DataGridView con modo de selección por celda (no por fila), utilizas una columna para mostrar la ruta de una imagen?, y quieres que al seleccionar una celda (haciendo doble-click) se abra la imagen de la columna asociada a esa fila, entonces:

Suscríbete al evento CellDubleclick y utiliza la información del evento (event-data) para localizar la columna y por ende la ruta de la imagen.


Seguramente no tengas el grid estructurado de esta manera, pero es solo un ejemplo:

VB.Net
Código
  1. Public Class Form1
  2.  
  3.    Private Sub Form1_Load() Handles MyBase.Load
  4.  
  5.        With Me.DataGridView1
  6.            .SelectionMode = DataGridViewSelectionMode.CellSelect
  7.            .MultiSelect = False
  8.            .Columns.Add("colImage", "Columna de Imagen")
  9.            .Columns.Add("colInfo1", "Columna adicional 1")
  10.            .Columns.Add("colInfo2", "Columna adicional 2")
  11.            .Rows.Add({"C:\Imagen.jpg", "Info adicional 1", "Info adicional 2"})
  12.        End With
  13.  
  14.    End Sub
  15.  
  16.    Private Sub DataGridView1_CellContentClick(ByVal sender As Object, ByVal e As DataGridViewCellEventArgs) _
  17.    Handles DataGridView1.CellDoubleClick
  18.  
  19.        Dim value As String = DirectCast(sender, DataGridView).Rows(e.RowIndex).Cells(0).Value.ToString
  20.  
  21.        If Not String.IsNullOrEmpty(value) AndAlso IO.File.Exists(value) Then
  22.            Try
  23.                Process.Start(value)
  24.  
  25.            Catch ex As Exception
  26.                Throw
  27.  
  28.            End Try
  29.        Else
  30.            ' ...
  31.  
  32.        End If
  33.  
  34.    End Sub
  35.  
  36. End Class

C#
Código
  1. using Microsoft.VisualBasic;
  2. using System;
  3. using System.Collections;
  4. using System.Collections.Generic;
  5. using System.Data;
  6. using System.Diagnostics;
  7. public class Form1
  8. {
  9.  
  10. private void Form1_Load()
  11. {
  12. var _with1 = this.DataGridView1;
  13. _with1.SelectionMode = DataGridViewSelectionMode.CellSelect;
  14. _with1.MultiSelect = false;
  15. _with1.Columns.Add("colImage", "Columna de Imagen");
  16. _with1.Columns.Add("colInfo1", "Columna adicional 1");
  17. _with1.Columns.Add("colInfo2", "Columna adicional 2");
  18. _with1.Rows.Add({
  19. "C:\\Imagen.jpg",
  20. "Info adicional 1",
  21. "Info adicional 2"
  22. });
  23. }
  24.  
  25. private void DataGridView1_CellContentClick(object sender, DataGridViewCellEventArgs e)
  26. {
  27. string value = ((DataGridView)sender).Rows(e.RowIndex).Cells(0).Value.ToString;
  28.  
  29. if (!string.IsNullOrEmpty(value) && IO.File.Exists(value)) {
  30. try {
  31. Process.Start(value);
  32. } catch (Exception ex) {
  33. throw;
  34. }
  35. } else {
  36. // ...
  37. }
  38. }
  39.  
  40. public Form1()
  41. {
  42. Load += Form1_Load;
  43. }
  44.  
  45. }
  46.  
  47. //=======================================================
  48. //Service provided by Telerik (www.telerik.com)
  49. //=======================================================


Título: Re: abrir desde la fila de un Datagridview
Publicado por: irvincnt93 en 8 Febrero 2015, 11:59 am
hola amigo.. si creo que si me entendiste.. tengo una duda bro... primero te paso mi código..
Código
  1.  
  2. private void Form2_Load(object sender, EventArgs e)
  3.        {
  4.            conexion.ConnectionString = @"Data Source=IRVIN-PC;Initial Catalog=imagenes;Integrated Security=True";
  5.            SqlDataReader dr;
  6.            comandos.Connection = conexion;
  7.            comandos.CommandText = "SELECT periodo,departamento,materia,profesor,grupo,direccion FROM actasPath";
  8.            comandos.CommandType = CommandType.Text;
  9.            conexion.Open();
  10.            dataGridView1.Rows.Clear();
  11.  
  12.            dr = comandos.ExecuteReader();
  13.  
  14.            while (dr.Read())
  15.            {
  16.                int renglon = dataGridView1.Rows.Add();
  17.  
  18.                dataGridView1.Rows[renglon].Cells["periodos"].Value = dr.GetString(dr.GetOrdinal("periodo")).ToString();
  19.                dataGridView1.Rows[renglon].Cells["dpto"].Value = dr.GetString(dr.GetOrdinal("departamento")).ToString();
  20.                dataGridView1.Rows[renglon].Cells["materias"].Value = dr.GetString(dr.GetOrdinal("materia")).ToString();
  21.                dataGridView1.Rows[renglon].Cells["profesores"].Value = dr.GetString(dr.GetOrdinal("profesor")).ToString();
  22.                dataGridView1.Rows[renglon].Cells["grupos"].Value = dr.GetString(dr.GetOrdinal("grupo")).ToString();
  23.                dataGridView1.Rows[renglon].Cells["path"].Value = dr.GetString(dr.GetOrdinal("direccion")).ToString();
  24.            }
  25.            conexion.Close();
  26.        }
  27.        private void dataGridView1_CellContentClick(object sender, DataGridViewCellEventArgs e)
  28.        {
  29.            string valor = ((DataGridView)sender).Rows(e.RowIndex).Cell(0).Value.ToString;
  30.  
  31.            if(!String.IsNullOrEmpty(valor) && IO.File.Exists(valor)){
  32.                try
  33.                {
  34.                    Process.Start(valor);
  35.                }
  36.                catch (Exception ex)
  37.                {
  38.                    throw;
  39.                }  
  40.            }
  41.            else
  42.            {
  43.  
  44.            }
  45.        }
  46.  
  47.  
  48.  
  49.  


mi este es lo que tengo hermano, en tu código veo que en la parte de arriba del evento CellContentClick tienes un código que supongo yo es para llenar el datagridview (aun que lo estoy dudando, creo que es parde del codigo para que lo de abajo me funcione correctamente), el mio lo puse de esa manera. las tres palabras que subraye dentro del evento CellContentClick me marcan error bro, porfa ayudame  


Título: Re: abrir desde la fila de un Datagridview
Publicado por: Eleкtro en 11 Febrero 2015, 15:28 pm
en tu código veo que en la parte de arriba del evento CellContentClick tienes un código que supongo yo es para llenar el datagridview (aun que lo estoy dudando, creo que es parde del codigo para que lo de abajo me funcione correctamente)

No te preocupes, era un simple relleno del DataGridView para mostrarte un código funcional.


las tres palabras que subraye dentro del evento CellContentClick me marcan error bro, porfa ayudame  

Debes seguir las normas del foro para utilizar las etiquetas al insertar código.

Puedes utilizar los parámetros de las etiquetas para resaltar lineas del código como puedes ver en tu comentario que he editado arriba, o puedes especificar exactamente los nombres.

Dicho esto, si el compiler te está indicando un error y además te está mostrando la causa del error y la información adicional sobre el mismo, ¿porque no muestras la información sobre el error?, no soy adivino.

De todas formas, por los nombres que subrayaste, deduzco que seguramente los errores sean porque no hayas importado los namespaces necesarios.
Código
  1. Using System.IO; // File
  2. Using System.Diagnostics; // Process
  3. Using System.Windows.Forms; // DataGridView.Rows

...Pero es que como ya he explicado puedes comprobar la causa de esos errores sin necesidad de ayuda, muestra la info del error si necesitas ayuda para solucionarlos en caso de que el error no sea por la ausencia de los namespaces.

Saludos!