Frank Dzaebel, erstellt am: 09.08.06, zuletzt geändert: 09.08.06
Kategorie: DataGridView, .NET-Version: 2.0, [Download]
Hier wird eine Bearbeitungsmöglichkeit für das DataGridView vorgestellt, bei der eine benutzerdefinierte Aktion nach Druck auf einen Button ausgeführt wird. Der Button erscheint nur bei Klick auf die DataGridView-Zelle und nur, wenn es die Link-Spalte ist:
Weiterführende MSDN-Beispiele:
- Beispiel für benutzerdefinierte DataGridView-Spalten (Hosten eines MaskedTextBox-Steuerelementes)
- Beispiel für das DataGridView-Steuerelement (u.a. Master/Detail, Hyperlinkspalte, ungebundene CheckBoxColumn)
using System;
using System.Windows.Forms;
using System.Drawing;
using System.Diagnostics;
using System.Reflection;
namespace DgvButtonColumn
{
public partial class Form1 : Form
{
public Form1() { InitializeComponent(); }
DataSet1.DatenDataTable dt;
DataGridView dgv;
DataSet1 ds = new DataSet1();
private void Form1_Load(object sender,EventArgs e)
{
dgv = new DataGridView(); dt = ds.Daten;
dgv.Width = 500;
dt.AddDatenRow("Dagobert Duck",true,1,"http://Dzaebel.NET");
dt.AddDatenRow("Donald Duck",false,3,@"C:\AddIns.doc");
dt.AddDatenRow("Gustav Gans",false,0,"http://www.Google.de");
dt.AddDatenRow("Trick Duck",false,0,"ftp://strato.de");
dgv.DataSource = dt;
dgv.AutoSizeColumnsMode = DataGridViewAutoSizeColumnsMode.AllCells;
dgv.Location = new Point(15,15); this.Controls.Add(dgv);
dgv.EditMode = DataGridViewEditMode.EditOnEnter;
dgv.EditingControlShowing += new DataGridViewEditingControlShowingEventHandler(dgv_EditingControlShowing);
}
void dgv_EditingControlShowing(object sender,DataGridViewEditingControlShowingEventArgs e)
{
if (dgv.CurrentCell.ColumnIndex != dt.LinkColumn.Ordinal) return;
Button btn = new Button(); btn.Dock = DockStyle.Right;
btn.Name = "btnOpen"; btn.Text = "..."; btn.Width = 25;
if (!dgv.EditingPanel.Controls.ContainsKey(btn.Name))
dgv.EditingPanel.Controls.Add(btn);
btn.Click += new EventHandler(btn_Click);
btn.BringToFront();
}
void btn_Click(object sender,EventArgs e)
{
Uri uri = new Uri(dgv.CurrentCell.Value.ToString());
DialogResult res;
if (uri.IsWellFormedOriginalString())
{
res = MessageBox.Show(uri.AbsoluteUri + " aufrufen?","Aufrufen ?",
MessageBoxButtons.OKCancel,MessageBoxIcon.Question,MessageBoxDefaultButton.Button1);
if (res == DialogResult.OK)
{
Application.DoEvents();
try { Process.Start(uri.AbsoluteUri); }
catch (Exception exp) { dgv.CurrentRow.ErrorText = exp.Message; }
}
return;
}
OpenFileDialog ofd = new OpenFileDialog();
ofd.FileName = dgv.CurrentCell.Value.ToString();
ofd.CheckFileExists = false; ofd.CheckPathExists = false;
ofd.ValidateNames = false; ofd.ShowReadOnly = true;
res = ofd.ShowDialog();
if (res != DialogResult.OK) return;
Application.DoEvents();
try { Process.Start(ofd.FileName); }
catch (Exception exp){dgv.CurrentRow.ErrorText = exp.Message;}
}
}
}