GridView mit RowCommand-Edit-Button - zweimal Click für Edit-Modus

14/04/2010 - 19:06 von Michael Broede | Report spam
Hallo NG,

ich schaue mir gerade das Gridview an und lerne. Dabei habe ich eine
lokale Datatable mit den zwei Spalten Nummer und Name an ein GridView
gebunden und einen Knopf zur Erzeugung einzelner Gridzeilen drunter
gepackt. Am Ende jeder Gridzeile gibts die Buttons "del" und "upd",
welche ich im RowCommand-Event auswerte. "del" funktioniert korrekt. Nur
beim "upd" muss ich zweimal klicken, bis das Grid in den Edit-Modus
geht. Was mache ich falsch? Kann jemand helfen? Vielen Dank schon mal.

Anbei ein wenig Code.

Viele Grüße

Michael

VS2005, Framework 2.0



// ASPX

<form id="form1" runat="server">
<div>
<asp:GridView ID="GridView1"
runat="server"
AutoGenerateColumns="False"
OnRowCommand="GridView1_RowCommand">
<Columns>
<asp:BoundField DataField="Nummer" HeaderText="Nummer">
<ItemStyle Width="50px" />
</asp:BoundField>
<asp:TemplateField HeaderText="Name">
<EditItemTemplate>
<asp:TextBox ID="editName"
Width="200"
runat="server"
Text='<%# Bind("Name") %>'>
</asp:TextBox>
</EditItemTemplate>
<ItemTemplate>
<asp:Label runat="server"
Width="400"
Text='<%# Bind("Name") %>'
ID="Label3">
</asp:Label>
</ItemTemplate>
</asp:TemplateField>
<asp:ButtonField ButtonType="Link" CommandName="del" Text="del" />
<asp:ButtonField ButtonType="Link" CommandName="upd" Text="upd" />
</Columns>
</asp:GridView>
<br />
<asp:Button ID="Button1"
runat="server"
OnClick="Button1_Click"
Text="Create Gridrow" />
</div>
</form>


// C#

private static DataTable _table = null;

protected void Page_Load(object sender, EventArgs e)
{
if (!IsPostBack)
{
if (_table != null)
_table.Clear();
}
}

protected void GridView1_RowCommand(object sender,
GridViewCommandEventArgs e)
{
int idx;

if (!int.TryParse(e.CommandArgument.ToString(), out idx))
return;

if (e.CommandName == "del")
{
_table.Rows[idx].Delete();
_table.AcceptChanges();
this.GridView1.DataSource = _table;
this.GridView1.DataBind();
}
if (e.CommandName == "upd")
{
this.GridView1.EditIndex = idx;
}
}

protected void Button1_Click(object sender, EventArgs e)
{
if (_table == null)
{
_table = new DataTable();

DataColumn colNummer = new DataColumn();
colNummer.DataType = System.Type.GetType("System.Int32");
colNummer.ColumnName = "Nummer";
_table.Columns.Add(colNummer);

DataColumn colName = new DataColumn();
colName.DataType = System.Type.GetType("System.String");
colName.ColumnName = "Name";
_table.Columns.Add(colName);
}

Random r = new System.Random();
int n = r.Next(1, 1000);

DataRow row = _table.NewRow();
row["Nummer"] = n;
row["Name"] = "Name" + n.ToString();
_table.Rows.Add(row);
_table.AcceptChanges();
this.GridView1.DataSource = _table;
this.GridView1.DataBind();
}
 

Lesen sie die antworten

#1 Stefan Falz [MVP]
14/04/2010 - 19:53 | Warnen spam
Hallo Michael,

"Michael Broede" schrieb:

if (e.CommandName == "upd")
{
this.GridView1.EditIndex = idx;
}
}




da fehlt wohl noch ein:

this.GridView1.DataBind();

Siehe bspw. auch:

http://www.microsoft.com/communitie...sp&tidác57e13-6a0a-4dd1-919b-44b9b9dc0d05

Tschau, Stefan
Microsoft MVP - Visual Developer ASP/ASP.NET
http://www.asp-solutions.de/ - Consulting, Development
http://www.aspnetzone.de/ - ASP.NET Zone, die ASP.NET Community

Ähnliche fragen