Update og slet problem
Min DataGrid sorterer og paging virker også fint, men når jeg vil slette en post eller redigerer og klikker på "Opdater" får jeg følgende fejl i browseren:Cannot find table 0.
Description: An unhandled exception occurred during the execution of the current web request. Please review the stack trace for more information about the error and where it originated in the code.
Exception Details: System.IndexOutOfRangeException: Cannot find table 0.
Source Error:
Line 31: DataRow[] objRows;;
Line 32: string strSelect = @"ID='" + ID.ToString() + "'";
Line 33: objRows = _AndebyDataset.Tables[0].Select(strSelect);
Line 34: return objRows[0];
Line 35: }
Jeg bruger asp.net 1.1 og en Access database. Jeg bruger også en c# klasse:
Klasse:
------
public class Personaleklassen
{
OleDbDataAdapter objAdapter;
DataSet _PersonaleDataset = new DataSet();
public DataSet PersonaleData()
{
string strConnection;
string strSQL;
OleDbConnection objConnection;
strConnection = @"Provider=Microsoft.Jet.OLEDB.4.0; Data Source=" + ConfigurationSettings.AppSettings["PersonalePath"] + @"\Personale.mdb";
objConnection = new OleDbConnection(strConnection);
strSQL = "SELECT * FROM Personale";
objAdapter = new OleDbDataAdapter(strSQL, objConnection);
objAdapter.Fill(_PersonaleDataset, "Personale");
return _PersonaleDataset;
}
public DataRow Persons(int ID) {
DataRow[] objRows;;
string strSelect = @"ID='" + ID.ToString() + "'";
objRows = _PersonaleDataset.Tables[0].Select(strSelect);
return objRows[0];
}
public void Opdater() {
OleDbCommandBuilder ObjBuilder = new OleDbCommandBuilder(objAdapter);
objAdapter.UpdateCommand = ObjBuilder.GetUpdateCommand();
objAdapter.InsertCommand = ObjBuilder.GetInsertCommand();
objAdapter.DeleteCommand = ObjBuilder.GetDeleteCommand();
objAdapter.Update(_PersonaleDataset, "Personale");
}
public void Slet(int ID) {
DataRow[] objRows;;
string strSelect = @"ID='" + ID.ToString() + "'";
objRows = _PersonaleDataset.Tables[0].Select(strSelect);
objRows[0].Delete();
Opdater();
}
}
aspx-fil:
---------
<asp:datagrid id="dgridPersonale" runat="server" Width="600px" AutoGenerateColumns="False" DataKeyField="ID"
AllowSorting="True" AllowPaging="True" PageSize="4">
<Columns>
<asp:BoundColumn DataField="ID" SortExpression="ID" ReadOnly="True" HeaderText="ID"></asp:BoundColumn>
<asp:BoundColumn DataField="Fornavn" SortExpression="Fornavn" HeaderText="Fornavn"></asp:BoundColumn>
<asp:BoundColumn DataField="Efternavn" SortExpression="Efternavn" HeaderText="Efternavn"></asp:BoundColumn>
<asp:BoundColumn DataField="Telefon" SortExpression="Telefon" HeaderText="Telefon"></asp:BoundColumn>
<asp:BoundColumn DataField="Foedselsdato" SortExpression="Foedselsdato" HeaderText="Fødselsdato"></asp:BoundColumn>
<asp:EditCommandColumn ButtonType="LinkButton" UpdateText="Opdater" CancelText="Annuler" EditText="Rediger"></asp:EditCommandColumn>
<asp:ButtonColumn Text="Slet" CommandName="Delete"></asp:ButtonColumn>
</Columns>
</asp:datagrid>
aspx.cs fil:
------------
...
...
using ProjektDatagrid.Klasser;
namespace ProjektDatagrid
{
public class DatabaseSomGrundlaeg_Loesning : System.Web.UI.Page
{
protected System.Web.UI.WebControls.DataGrid dgridPersonale;
Personaleklassen _PersonaleKlas = new Personaleklassen();
private void Page_Load(object sender, System.EventArgs e)
{
if (!IsPostBack){
sortfield = "ID";
sortorder = "ASC";
DoDatabind();
}
}
public string sortfield {
get { return (string)ViewState["sortfield"]; }
set { ViewState["sortfield"] = value; }
}
public string sortorder {
get { return (string)ViewState["sortorder"]; }
set { ViewState["sortorder"] = value; }
}
DataSet GetDataset()
{
return _PersonaleKlas.PersonaleData();
}
private void DoDatabind() {
DataView objDataView;
objDataView = GetDataset().Tables[0].DefaultView;
if (sortfield != "")
objDataView.Sort = sortfield + " " + sortorder;
dgridPersonale.DataSource = objDataView;
dgridPersonale.DataBind();
}
private void ChangePage(object sender, DataGridPageChangedEventArgs e) {
if (dgridPersonale.EditItemIndex == -1)
{
dgridPersonale.CurrentPageIndex = e.NewPageIndex;
dgridPersonale.SelectedIndex = -1;
DoDatabind();
}
}
private void dgridPersonale_SortCommand(object sender, DataGridSortCommandEventArgs e) {
if (dgridPersonale.EditItemIndex == -1) {
if (e.SortExpression != sortfield) {
sortfield = e.SortExpression;
sortorder = "ASC";
}
else {
if (sortorder == "DESC") {
sortorder = "ASC";
}
else {
sortorder = "DESC";
}
}
DoDatabind();
}
}
private void dgridPersonale_CancelCommand(object source, DataGridCommandEventArgs e) {
dgridPersonale.EditItemIndex = -1;
DoDatabind();
}
private void dgridPersonale_EditCommand(object sender, DataGridCommandEventArgs e) {
dgridPersonale.EditItemIndex = e.Item.ItemIndex;
DoDatabind();
}
private void dgridPersonale_UpdateCommand(object sender, DataGridCommandEventArgs e) {
DataRow Persons = _PersonaleKlas.Persons(Convert.ToInt16(dgridPersonale.DataKeys[e.Item.ItemIndex]));
Persons["Fornavn"] = ((TextBox)e.Item.Cells[1].Controls[0]).Text;
Persons["Efternavn"] = ((TextBox)e.Item.Cells[2].Controls[0]).Text;
Persons["Telefon"] = ((TextBox)e.Item.Cells[3].Controls[0]).Text;
Persons["Foedselsdato"] = ((TextBox)e.Item.Cells[4].Controls[0]).Text;
_PersonaleKlas.Opdater();
dgridPersonale.EditItemIndex = -1;
DoDatabind();
}
private void dgridPersonale_DeleteCommand(object sender, DataGridCommandEventArgs e) {
_PersonaleKlas.Slet(Convert.ToInt16(dgridPersonale.DataKeys[e.Item.ItemIndex]));
dgridPersonale.EditItemIndex = -1;
if (dgridPersonale.CurrentPageIndex > 0 && dgridPersonale.Items.Count == 1)
dgridPersonale.CurrentPageIndex -= 1;
DoDatabind();
}
private void dgridPersonale_ItemDataBound(object sender, DataGridItemEventArgs e) {
if (e.Item.ItemType != ListItemType.Header && e.Item.ItemType != ListItemType.Footer)
{
LinkButton deleteButton = (LinkButton)e.Item.Cells[6].Controls[0];
deleteButton.Attributes.Add("onClick", "java script:return confirm('Er du sikker på, at du ønsker at slette?')");
}
}
#region Web Form Designer generated code
...
...
private void InitializeComponent()
{
this.dgridPersonale.PageIndexChanged += new System.Web.UI.WebControls.DataGridPageChangedEventHandler(this.ChangePage);
this.dgridPersonale.CancelCommand += new System.Web.UI.WebControls.DataGridCommandEventHandler(this.dgridPersonale_CancelCommand);
this.dgridPersonale.EditCommand += new System.Web.UI.WebControls.DataGridCommandEventHandler(this.dgridPersonale_EditCommand);
this.dgridPersonale.SortCommand += new System.Web.UI.WebControls.DataGridSortCommandEventHandler(this.dgridPersonale_SortCommand);
this.dgridPersonale.UpdateCommand += new System.Web.UI.WebControls.DataGridCommandEventHandler(this.dgridPersonale_UpdateCommand);
this.dgridPersonale.DeleteCommand += new System.Web.UI.WebControls.DataGridCommandEventHandler(this.dgridPersonale_DeleteCommand);
this.dgridPersonale.ItemDataBound += new System.Web.UI.WebControls.DataGridItemEventHandler(this.dgridPersonale_ItemDataBound);
this.Load += new System.EventHandler(this.Page_Load);
}
#endregion
}
}