問題在這裡 'das' ,請你先模擬查詢一下,確認查詢出來的結果是不是沒放'講師ID'這欄位進去?
private void LoadData()
{
IList<object> das = new List<object>();
das = bll產品簡章.Get產品講師列表(); // 這裡
產品線講師GridView.DataSource = das; // 這裡
產品線講師GridView.DataBind();
}
恩恩,剛剛模擬查詢後,das裡面有抓到我要的資料
但是到了產品線講師GridView.DataBind();那列之後就跳出一樣的錯誤。
我在想是不是因為我設了DataKeyNames="講師ID"
所以他變成抓不到,但是DataKeyNames是為了做下面的RowDeleting 事件,所以想問一下這個部分我應該怎麼處理...
<asp:GridView ID="產品線講師GridView" runat="server" EmptyDataText="無資料..." SkinID="GridViewHoverEffectStyle" OnRowCommand="產品線講師GridView_RowCommand" OnRowDeleting="產品線講師GridView_RowDeleting" DataKeyNames="講師ID">
這問題是這樣,如果你一開始Load的時候也是這一段的話,而且能成功Bind出GV表格的話,這DataKeyNames="講師ID"應該不是問題,但可以嘗試拿掉試試看。
protected void 產品線講師GridView_RowDeleting(object sender, GridViewDeleteEventArgs e)
{
int teacherID = WebUtility.GetIntValue(產品線講師GridView.DataKeys[e.RowIndex].Value.ToString(), -1);
/// 改成以下 我把你的 "講師ID" 先認定成 Label
int teacherID = WebUtility.GetIntValue(((Label)產品線講師GridView.Rows[e.RowIndex].FindControl("講師ID")).Text, -1);
}
但通常我不是這樣去抓ID的,有時候要抓的資料比較多點,是把GV轉換成DataTable來抓取多筆資料。
另外問一點,在這GV內 "講師ID"這值應該是不會重複的,對吧?
我嘗試拿掉DataKeyNames="講師ID"後GV就可以正常Bind了,應該真的是DataKeyName在搞鬼....
嗯嗯對的,講師ID是流水編號,不會重複。
我剛剛改成把他寫到RowCommand就可以了
下面是我改過後的程式碼
protected void 產品線講師GridView_RowCommand(object sender, GridViewCommandEventArgs e)
{
if (e.CommandName == "編輯")
{
int Id = Convert.ToInt32(e.CommandArgument);
學員專區產品線講師Info Data = ins講師.Get學員專區產品線講師(Id);
產品線IDTextBox.Text = Data.產品線Id.ToString();
講師編號TextBox.Text = Data.講師編號.ToString();
排列TextBox.Text = Data.排列.ToString();
產品線講師新增Button.Text = "確認修改";
}
if (e.CommandName == "刪除")
{
int Id = Convert.ToInt32(e.CommandArgument);
ins講師.Delete學員專區產品線講師(Id);
ShowMsg("已刪除");
LoadData();
}
}
不過想虛心請教一個問題,
為什麼刪除資料為什麼不在RowCommand裡面做就好,
有些頁面會做在RowDeleting裡呢?
這兩者有什麼不同QQ