hi all!
im trying to edit data in a datagrid (like described here:
http://aspnet.4guysfromrolla.com/articles/071002-1.aspx) but if i click
the edit button i get the following error
invalid attempt to FieldCount because datareader is already closed
(sorry, this error message is translated from german)
when trying to do the databinding.
heres my code:
page.aspx
<asp:datagrid id="dgSoftware " style="Z-INDEX: 102; LEFT: 23px; POSITION:
absolute; TOP: 68px"
runat="server" Height="235px" Width="856px"
AutoGenerateCol umns="False" DataKeyField="s w_ref" GridLines="None "
CellPadding="3" BackColor="Whit e"
BorderWidth="2p x" CellSpacing="1" BorderStyle="Ri dge"
BorderColor="Wh ite">
<SelectedItemSt yle Font-Bold="True" ForeColor="Whit e"
BackColor="#947 1DE"></SelectedItemSty le>
<ItemStyle ForeColor="Blac k" BackColor="#DED FDE"></ItemStyle>
<HeaderStyle Font-Bold="True" ForeColor="#E7E 7FF"
BackColor="#4A3 C8C"></HeaderStyle>
<FooterStyle ForeColor="Blac k" BackColor="#C6C 3C6"></FooterStyle>
<Columns>
<asp:BoundColum n DataField="sw_b ez_str"
HeaderText="Bez eichnung"></asp:BoundColumn >
<asp:BoundColum n DataField="sw_h erst_str"
HeaderText="Her steller"></asp:BoundColumn >
<asp:BoundColum n DataField="sw_f ilesys_str"
HeaderText="Dat eisystem"></asp:BoundColumn >
<asp:TemplateCo lumn HeaderText="Sof twareart">
<ItemTemplate >
<%# getHtswtyp(Data Binder.Eval(Con tainer.DataItem ,
"htswtyp_re f")) %>
</ItemTemplate>
<EditItemTempla te>
<asp:DropDownLi st ID="DropDownSwr ef" Runat="server"
DataTextField=" htswtyp_name_st r" DataValueField= "htswtyp_re f"
DataSource='<%# getSwtyp() %>' SelectedIndex=' <%#
GetSelIndexSwar t(DataBinder.Ev al(Container.Da taItem, "htswtyp_re f")) %>' />
</EditItemTemplat e>
</asp:TemplateCol umn>
<asp:BoundColum n DataField="sw_b em_str"
HeaderText="Bem erkung"></asp:BoundColumn >
<asp:TemplateCo lumn HeaderText="zug ehörige Hardware">
<ItemTemplate >
<%# getHwref(DataBi nder.Eval(Conta iner.DataItem,
"hw_ref")) %>
</ItemTemplate>
<EditItemTempla te>
<asp:DropDownLi st ID="DropDownHwr ef" Runat="server"
DataTextField=" id" DataValueField= "hwId" DataSource='<%# getRechner()%>'
SelectedIndex=' <%#
GetSelIndexRech ner(DataBinder. Eval(Container. DataItem, "hw_ref")) %>' />
</EditItemTemplat e>
</asp:TemplateCol umn>
<asp:EditComman dColumn ButtonType="Lin kButton"
UpdateText="Akt ualisieren" CancelText="Abb rechen"
EditText="Bearb eiten"></asp:EditCommand Column>
<asp:ButtonColu mn Text="Löschen"
CommandName="De lete"></asp:ButtonColum n>
</Columns>
<PagerStyle HorizontalAlign ="Right" ForeColor="Blac k"
Position="TopAn dBottom" BackColor="#C6C 3C6"></PagerStyle>
</asp:datagrid>
codebehind code:
....
private void Page_Load(objec t sender, System.EventArg s e)
{
// Hier Benutzercode zur Seiteninitialis ierung einfügen
this.strDbConn = ConfigurationSe ttings.AppSetti ngs["connString "];
this.strDownloa dKennung =
ConfigurationSe ttings.AppSetti ngs["downloadKennun g"];
//this.iId = (int) Session.Get("id ");
alHwId = new ArrayList((Arra yList) Session["alHwId"]);
this.iId = 1231;
this.datAktDatu m = DateTime.Now.To String("dd.MM.y yyy HH:mm:ss");
//datatable mit id/hwid erzeugen
DataColumn dcTemp;
DataRow drTemp;
dcTemp = new DataColumn();
dcTemp.DataType = System.Type.Get Type("System.In t32");
dcTemp.ColumnNa me = "id";
dtHwid.Columns. Add(dcTemp);
dcTemp = new DataColumn();
dcTemp.DataType = System.Type.Get Type("System.In t32");
dcTemp.ColumnNa me = "hwId";
dtHwid.Columns. Add(dcTemp);
ArrayList alIds = (ArrayList)Sess ion["alHwId"];
int[][] iIds = new int[alIds.Count][];
for (int i = 0; i < alIds.Count; i++)
{
drTemp = dtHwid.NewRow() ;
drTemp["id"] = i+1;
drTemp["hwId"] = Convert.ToInt32 (alIds[i].ToString());
dtHwid.Rows.Add (drTemp);
}
//ENDE datatable
if (!IsPostBack)
{
showDataSoftwar e();
showDataHardwar e();
}
}
....
private void showDataSoftwar e()
{
string strWherebuilder = "";
for (int i =0; i < this.alHwId.Cou nt; i++)
{
if (this.alHwId.Co unt == 1 || i == (this.alHwId.Co unt-1) )
strWherebuilder += this.alHwId[i].ToString();
else strWherebuilder += this.alHwId[i].ToString() + " OR hw_ref
= ";
}
string query = "SELECT * FROM sw WHERE hw_ref = " + strWherebuilder ;
//DEBUG
this.tbDebug.Te xt += "QUERY: " + query;
this.sqlConn = new SqlConnection(t his.strDbConn);
this.sqlAdapter = new SqlDataAdapter( query, this.sqlConn);
this.sqlConn.Op en();
this.dsDaten = new DataSet();
this.sqlAdapter .Fill(this.dsDa ten, "sw" );
//this.createList (query);
//neue zeile einfuegen
DataRow BlankRow = this.dsDaten.Ta bles["sw"].NewRow( );
BlankRow[1] = "Bitte Wert eingeben!";
this.dsDaten.Ta bles[ "sw" ].Rows.InsertAt( BlankRow, 0 );
//daten binden
this.dgSoftware .DataSource = this.dsDaten;
this.dgSoftware .DataBind(); <----------error occurs here!!!!
this.sqlConn.Cl ose();
}
....
does anyone know what could be the problem???
thx for help in advance!
greets
wolfgang