abrir desde la fila de un Datagridview

Iniciado por irvincnt93, 8 Febrero 2015, 00:17 AM

0 Miembros y 1 Visitante están viendo este tema.

irvincnt93

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?

Eleкtro

#1
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 (vbnet) [Seleccionar]
Public Class Form1

   Private Sub Form1_Load() Handles MyBase.Load

       With Me.DataGridView1
           .SelectionMode = DataGridViewSelectionMode.CellSelect
           .MultiSelect = False
           .Columns.Add("colImage", "Columna de Imagen")
           .Columns.Add("colInfo1", "Columna adicional 1")
           .Columns.Add("colInfo2", "Columna adicional 2")
           .Rows.Add({"C:\Imagen.jpg", "Info adicional 1", "Info adicional 2"})
       End With

   End Sub

   Private Sub DataGridView1_CellContentClick(ByVal sender As Object, ByVal e As DataGridViewCellEventArgs) _
   Handles DataGridView1.CellDoubleClick

       Dim value As String = DirectCast(sender, DataGridView).Rows(e.RowIndex).Cells(0).Value.ToString

       If Not String.IsNullOrEmpty(value) AndAlso IO.File.Exists(value) Then
           Try
               Process.Start(value)

           Catch ex As Exception
               Throw

           End Try
       Else
           ' ...

       End If

   End Sub

End Class


C#
Código (csharp) [Seleccionar]

using Microsoft.VisualBasic;
using System;
using System.Collections;
using System.Collections.Generic;
using System.Data;
using System.Diagnostics;
public class Form1
{

private void Form1_Load()
{
var _with1 = this.DataGridView1;
_with1.SelectionMode = DataGridViewSelectionMode.CellSelect;
_with1.MultiSelect = false;
_with1.Columns.Add("colImage", "Columna de Imagen");
_with1.Columns.Add("colInfo1", "Columna adicional 1");
_with1.Columns.Add("colInfo2", "Columna adicional 2");
_with1.Rows.Add({
"C:\\Imagen.jpg",
"Info adicional 1",
"Info adicional 2"
});
}

private void DataGridView1_CellContentClick(object sender, DataGridViewCellEventArgs e)
{
string value = ((DataGridView)sender).Rows(e.RowIndex).Cells(0).Value.ToString;

if (!string.IsNullOrEmpty(value) && IO.File.Exists(value)) {
try {
Process.Start(value);
} catch (Exception ex) {
throw;
}
} else {
// ...
}
}

public Form1()
{
Load += Form1_Load;
}

}

//=======================================================
//Service provided by Telerik (www.telerik.com)
//=======================================================








irvincnt93

#2
hola amigo.. si creo que si me entendiste.. tengo una duda bro... primero te paso mi código..
Código (csharp,29,31,34) [Seleccionar]


private void Form2_Load(object sender, EventArgs e)
       {
           conexion.ConnectionString = @"Data Source=IRVIN-PC;Initial Catalog=imagenes;Integrated Security=True";
           SqlDataReader dr;
           comandos.Connection = conexion;
           comandos.CommandText = "SELECT periodo,departamento,materia,profesor,grupo,direccion FROM actasPath";
           comandos.CommandType = CommandType.Text;
           conexion.Open();
           dataGridView1.Rows.Clear();

           dr = comandos.ExecuteReader();

           while (dr.Read())
           {
               int renglon = dataGridView1.Rows.Add();

               dataGridView1.Rows[renglon].Cells["periodos"].Value = dr.GetString(dr.GetOrdinal("periodo")).ToString();
               dataGridView1.Rows[renglon].Cells["dpto"].Value = dr.GetString(dr.GetOrdinal("departamento")).ToString();
               dataGridView1.Rows[renglon].Cells["materias"].Value = dr.GetString(dr.GetOrdinal("materia")).ToString();
               dataGridView1.Rows[renglon].Cells["profesores"].Value = dr.GetString(dr.GetOrdinal("profesor")).ToString();
               dataGridView1.Rows[renglon].Cells["grupos"].Value = dr.GetString(dr.GetOrdinal("grupo")).ToString();
               dataGridView1.Rows[renglon].Cells["path"].Value = dr.GetString(dr.GetOrdinal("direccion")).ToString();
           }
           conexion.Close();
       }
       private void dataGridView1_CellContentClick(object sender, DataGridViewCellEventArgs e)
       {
           string valor = ((DataGridView)sender).Rows(e.RowIndex).Cell(0).Value.ToString;

           if(!String.IsNullOrEmpty(valor) && IO.File.Exists(valor)){
               try
               {
                   Process.Start(valor);
               }
               catch (Exception ex)
               {
                   throw;
               }  
           }
           else
           {

           }
       }






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  

Eleкtro

#3
Cita de: irvincnt93 en  8 Febrero 2015, 11:59 AMen 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.


Cita de: irvincnt93 en  8 Febrero 2015, 11:59 AMlas 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 (csharp) [Seleccionar]
Using System.IO; // File
Using System.Diagnostics; // Process
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!