DataGridView Frage:

25/03/2010 - 13:33 von Pawel Warmuth | Report spam
Hallo zusammen,

ich stehe gerade vor der Realisation eines Projektes.

Ich möchte Daten in einem DGV Darstellen
Im DGV befindet sich ein Button.
Auf Knopfdruck würde sich ein Extrafenster öffnen.
Am liebsten wàre es mir es öffnet sich genau unter der Zeile die Angeklickt
wurde an.

Nun meine Frage : Einfach ein Form an der Position drüberlegen oder gibt es
die möglichkeit das DGV so zu erweitern das es quasi eine Temporàre Zeile
generiert mit einem USercontrol drin ?

Bsp.

Col1 Col2 Col3
+ Name KDNR

Col1 Col2 Col3
- Name KDN
Ganz viele Infos die hier eingeblendet werden sollen

Grüße
Pawel
 

Lesen sie die antworten

#1 Frank Dzaebel
25/03/2010 - 21:31 | Warnen spam
Hallo Pawel,

Im DGV befindet sich ein Button.
Auf Knopfdruck würde sich ein Extrafenster öffnen.
Am liebsten wàre es mir es öffnet sich genau unter der Zeile die
Angeklickt wurde an.


____________
Nun meine Frage : Einfach ein Form an der Position drüberlegen oder gibt
es die möglichkeit das DGV so zu erweitern das es quasi eine Temporàre
Zeile generiert mit einem USercontrol drin ?



Es gàbe die Möglichkeit, zum Beispiel die Height der entsprechenden
DataGridViewRow zu erhöhen und ein Control in den EditingPanel einzufügen.
Aber IMHO ist es besser/schöner/einfacher/variabler, wenn man eine Form
darüberblendet. Mal ein Beispiel:

public partial class Form1 : Form
{
private List<Employee> employees = new List<Employee>();
private List<Task> tasks = new List<Task>();
private Button reportButton = new Button();
public DataGridView Dgv = new DataGridView();

public Form1()
{
Dgv.Dock = DockStyle.Fill;
Dgv.AutoSizeColumnsMode DataGridViewAutoSizeColumnsMode.AllCells;
reportButton.Text = "Generate Report";
reportButton.Dock = DockStyle.Top;
reportButton.Click += new EventHandler(reportButton_Click);

Controls.Add(Dgv);
Controls.Add(reportButton);
Load += new EventHandler(Form1_Load);
Text = "DataGridViewComboBoxColumn Demo";
}

// Initializes the data source and populates the DataGridView control.
private void Form1_Load(object sender, EventArgs e)
{
PopulateLists();
Dgv.AutoGenerateColumns = false;
Dgv.DataSource = tasks;
AddColumns();
}

// Populates the employees and tasks lists.
private void PopulateLists()
{
employees.Add(new Employee("Harry"));
employees.Add(new Employee("Sally"));
employees.Add(new Employee("Roy"));
employees.Add(new Employee("Pris"));
tasks.Add(new Task(1, employees[1]));
tasks.Add(new Task(2));
tasks.Add(new Task(3, employees[2]));
tasks.Add(new Task(4));
}

// Configures columns for the DataGridView control.
private void AddColumns()
{
DataGridViewTextBoxColumn idColumn new DataGridViewTextBoxColumn();
idColumn.Name = "Task";
idColumn.DataPropertyName = "Id";
idColumn.ReadOnly = true;

DataGridViewComboBoxColumn assignedToColumn new DataGridViewComboBoxColumn();

// Populate the combo box drop-down list with Employee objects.
foreach (Employee e in employees) assignedToColumn.Items.Add(e);

// Add "unassigned" to the drop-down list and display it for
// empty AssignedTo values or when the user presses CTRL+0.
assignedToColumn.Items.Add("unassigned");
assignedToColumn.DefaultCellStyle.NullValue = "unassigned";

assignedToColumn.Name = "Assigned To";
assignedToColumn.DataPropertyName = "AssignedTo";
assignedToColumn.AutoComplete = true;
assignedToColumn.DisplayMember = "Name";
assignedToColumn.ValueMember = "Self";

// Add a button column.
DataGridViewButtonColumn buttonColumn new DataGridViewButtonColumn();
buttonColumn.HeaderText = "";
buttonColumn.Name = "Status Request";
buttonColumn.Text = "Request Status";
buttonColumn.UseColumnTextForButtonValue = true;

Dgv.Columns.Add(idColumn);
Dgv.Columns.Add(assignedToColumn);
Dgv.Columns.Add(buttonColumn);

// Add a CellClick handler to handle clicks in the button column.
Dgv.CellClick + new DataGridViewCellEventHandler(dataGridView1_CellClick);
Dgv.CellMouseDown += Dgv_CellMouseDown;
}

Point mouseDownLocation;

void Dgv_CellMouseDown(object sender, DataGridViewCellMouseEventArgs e)
{
mouseDownLocation = e.Location;
}

// Reports on task assignments.
private void reportButton_Click(object sender, EventArgs e)
{
StringBuilder report = new StringBuilder();
foreach (Task t in tasks)
{
String assignment t.AssignedTo == null ?
"unassigned" : "assigned to " + t.AssignedTo.Name;
report.AppendFormat("Task {0} is {1}.", t.Id, assignment);
report.Append(Environment.NewLine);
}
MessageBox.Show(report.ToString(), "Task Assignments");
}

// Calls the Employee.RequestStatus method.
void dataGridView1_CellClick(object sender, DataGridViewCellEventArgs e)
{
// Ignore clicks that are not on button cells.
if (e.RowIndex < 0 || e.ColumnIndex ! Dgv.Columns["Status Request"].Index) return;

// Retrieve the task ID.
Int32 taskID = (Int32)Dgv[0, e.RowIndex].Value;

// Retrieve the Employee object from the "Assigned To" cell.
Employee assignedTo = Dgv.Rows[e.RowIndex]
.Cells["Assigned To"].Value as Employee;

// Request status through the Employee object if present.
AnzeigeBox(e, taskID, assignedTo);
}

private void AnzeigeBox(DataGridViewCellEventArgs e,
Int32 taskID, Employee assignedTo)
{
Form anzeige = new Form();
anzeige.Size = new Size(100, 100);
anzeige.StartPosition = FormStartPosition.Manual;
anzeige.Left = Cursor.Position.X - mouseDownLocation.X;
anzeige.Top = Cursor.Position.Y - mouseDownLocation.Y +
Dgv[e.ColumnIndex, e.RowIndex].ContentBounds.Height;
TextBox txtInfo = new TextBox();
txtInfo.Multiline = true;
txtInfo.Dock = DockStyle.Fill;
anzeige.Controls.Add(txtInfo);
if (assignedTo != null)
{
txtInfo.AppendText("TaskID = " + taskID + "");
txtInfo.AppendText("AssignedTo = " + assignedTo.Name);
}
else txtInfo.AppendText(String.Format(
"Task {0} is unassigned.", taskID));
anzeige.ShowDialog(); anzeige.Dispose();
}
}

public class Task
{
public Task(Int32 id)
{
idValue = id;
}

public Task(Int32 id, Employee assignedTo)
{
idValue = id;
assignedToValue = assignedTo;
}

private Int32 idValue;
public Int32 Id
{
get { return idValue; }
set { idValue = value; }
}

private Employee assignedToValue;
public Employee AssignedTo
{
get { return assignedToValue; }
set { assignedToValue = value; }
}
}

public class Employee
{
public Employee(String name)
{
nameValue = name;
}

private String nameValue;
public String Name
{
get { return nameValue; }
set { nameValue = value; }
}

public Employee Self
{
get { return this; }
}
}
________________________


ciao Frank
Dipl.Inf. Frank Dzaebel [MCP/MVP C#]
http://Dzaebel.NET

Ähnliche fragen