2013-05-01 3 views
-1

c를있는 gridview에서 행 삭제 :내있는 gridview에서 행을 삭제하는 버튼에 다음 코드를 사용하고 #

int i = GridView1.SelectedIndex; 
tshirtSet.Tables["tshirts"].Rows[i].Delete(); 
GridView1.DataSource = tshirtset; 
GridView1.DataBind(); 
localhost.Service mc = new localhost.Service(); 

mc.GetTshirtSet(); 
mc.ModifyDatabase(tshirtSet); <-------(Error on this line) 

있는 gridview이 데이터베이스에 링크 된 웹 서비스에 의해 사용되는,이

[WebMethod] 
public string ModifyDatabase(DataSet myDataset) 
{ 
    string database = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=|DataDirectory|/shop.accdb;Persist Security Info=True"; 
    OleDbConnection myConn = new OleDbConnection(database); 
    OleDbDataAdapter myDataAdapter = new OleDbDataAdapter("Select * from tshirt", myConn); 
    OleDbCommandBuilder builder = new OleDbCommandBuilder(myDataAdapter); 
    builder.QuotePrefix = "["; 
    builder.QuoteSuffix = "]"; 
    myConn.Open(); 
    myDataAdapter.Update(myDataset, "tshirt"); 
    myConn.Close(); 
    return "done"; 
} 
: 방법은 내 데이터베이스이 방법은 웹 서비스에 또한

[WebMethod] 
public DataSet GetTshirtSet() 
{ 
    DataSet tshirtSet = new DataSet(); 
    string database = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=|DataDirectory|/shop.accdb;Persist Security Info=True"; 
    OleDbConnection myConn = new OleDbConnection(database); 
    string queryStr = "SELECT * FROM tshirt"; 
    OleDbDataAdapter myDataAdapter = new OleDbDataAdapter(queryStr, myConn); 
    myConn.Open(); 
    myDataAdapter.Fill(tshirtSet, "Tshirt"); 
    myConn.Close(); 
    return tshirtSet; 
} 

에서 데이터를 검색하는 데 사용됩니다, 이것은 기본적으로 데이터베이스를 업데이트

이들은 방법, 나는 어떤 행을 삭제하는 것, 어떤 제안?

System.Web.Services.Protocols.SoapException : 서버를 프로세스 요청에 연결할 수 없습니다. ---> System.InvalidOperationException : 키 열 정보를 반환하지 않는 SelectCommand에 대해 DeleteCommand에 대한 동적 SQL 생성이 지원되지 않습니다. System.Data.Common.DbDataAdapter에서 System.Data.Common.DbDataAdapter.Update (DataRow를 [] 데이터 행, DataTableMapping tableMapping)에서 System.Data.Common.DbDataAdapter.UpdatingRowStatusErrors (RowUpdatingEventArgs rowUpdatedEvent, DataRow를하여 DataRow)에서. 전자의 Service.ModifyDatabase에서 System.Data.Common.DbDataAdapter.Update (데이터 집합 데이터 집합 문자열 srcTable) (데이터 집합 MyDataSet로)에서 UpdateFromDataTable (DataTable을 데이터 테이블, DataTableMapping tableMapping) : \ 웹 \을 App_Code \ Service.cs : 라인 183 --- 내부 예외의 끝 스택 추적 ---

+0

나는 이것이 당신이 찾고있는 것이라고 믿는다 : http://stackoverflow.com/questions/7226548/how-to-delete-row-in-gridview-using-rowdeleting-event – RBZ

+1

그 코드의 어떤 것도 귀하의 GridView. '행을 삭제할 수 없습니다'는 의미는 무엇입니까? 오류가 발생했는데 아무 일도 일어나지 않습니까? ** 좀 더 구체적 ** ** – tnw

+0

오류가 발생하면 키 열 정보를 반환하지 않는 select 명령에 대해 deletecommand가 지원되지 않습니다. – budosvic

답변

0

변경 사항을 커밋하려면 DataSet.AcceptChanges() 메서드를 호출하십시오.

int i = GridView1.SelectedIndex; 
tshirtSet.Tables["tshirts"].Rows[i].Delete(); 
tshirtSet.AcceptChanges(); 
0
protected void lnkDeleteRisk_onclick(object sender, EventArgs e) 
{ 
     LinkButton obj_lnkbidtask = (LinkButton)sender; 

     GridViewRow gvTask = (GridViewRow)obj_lnkbidtask.NamingContainer; 

     HiddenField var_txtId (HiddenField)grdBidRisk.Rows[gvTask.RowIndex].Cells[0].FindControl("txtId"); 

     int int_ReturnVal = obj_WebService.DeleteRisk(var_txtId.Value); 

     if (int_ReturnVal == -1) 
     { 
      lblErrMsg.Visible = true; 
      lblErrMsg.Text = "Error occured during this operation, please contact administrator.";// "Authentication failed. Please try later."; 
     } 
     else 
     { 
      lblErrMsg.Visible = true; 
      lblErrMsg.Text = "Selected risk deleted successfully."; 
      SetInitialRow(); 
     } 
    } 
0

오류는 따라서 데이터 어댑터는 그것의 삭제 문에 전달하는 것을 알아낼 수 없습니다, select 문에서 데이터 테이블에 대한 기본 키를 알아낼 수 없음을 말하고있다 Update()에 전화 할 때 생성됩니다.

데이터베이스 테이블에 기본 키가 정의되어 있습니까?

관련 문제