中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

GridView的RowUpdating中DataKeys與非DataKeys

發布時間:2020-07-19 15:48:34 來源:網絡 閱讀:564 作者:夜雨流香 欄目:編程語言

今天在使用GridView的RowUpdating來修改數據時,開始總是提示Index超出范圍,反復查看了DataKeyNames的設置,發現它只設置了一個字段,因為之前一直不是太明白DataKeyNames的用途,所以才出了這個錯誤。原來我把DataKeyNames只設置了“UserID"這個字段,但后面的代碼卻如下:

string UserID=GridView1.DataKeys[e.RowIndex].Values[0].ToString();
string Username=GridView1.DataKeys[e.RowIndex].Values[1].ToString();
string Department=GridView1.DataKeys[e.RowIndex].Values[2].ToString();
string Company=GridView1.DataKeys[e.RowIndex].Values[3].ToString();

這樣,因為它只設置了UserID這個字段,自然第二行的時候它就出錯了,即是說,雖然在GridView里有四列,UserID,Username,Department,Company,但其中其實DataKeys集合中卻只有一列UserID。

于是就改變思路,要怎么樣去得到其它不是主鍵列(即不在DataKeyNames里)的值從而把它放入更新語句呢?對于我這樣的初學者來說,其實對于GridView的一些屬性,方法還不是很熟的情況下,這是一個問題。

于是在網上百度,Google了很多前輩們的文章,各種答案層出不窮,其中有很多都是要把對應的那個列做顯示轉換如(Label)GridView1.....,而且后面有用DataKeys[e.RowIndex]的,有用Rows[e.RowIndex]的,現在DataKeys明顯已經不行,所以我想應該是用Rows,但怎么用Rows集合來表示行中其它列的值呢?經過一番搜索,加上用Response.Write來嘗試輸出值(使用ClassicASP時養成的習慣),最后得出應該是如下格式:

string Username=((TextBox)this.GridView1.Rows[e.RowIndex].Cells[1].Controls[0]).Text;
string Department=((TextBox)this.GridView1.Rows[e.RowIndex].Cells[2].Controls[0]).Text;
string Company=((TextBox)this.GridView1.Rows[e.RowIndex].Cells[3].Controls[0]).Text;

因為我并沒有使用任何模板,用的只是最簡單,也是默認的BoundField,所以(我自己想當然,是不是還要以后驗證)我想應該把它顯示轉換成了TextBox.這樣終于算是成功了。

整個過程中,開始我認為是第一行(stringUserID=GridView1.DataKeys[e.RowIndex].Values[0].ToString();)的問題,弄了很久,后來通過Response.Write來嘗試輸出第一列的值時才發現,原來第一行是能正確輸出當前UserID值的,只是后面的三列都不行。所以發現原來一些以前的老習慣有時也是很有幫助的。

前臺GridView代碼如下:

<asp:GridView ID="GridView1" runat="server" Width="70%" CellPadding="4" ForeColor="#333333"
AutoGenerateColumns="False" AllowPaging="True" PageSize="20"
OnRowEditing="GridView1_RowEditing" OnRowUpdating="GridView1_RowUpdating"
DataKeyNames="UserID"  OnPageIndexChanging="GridView1_PageIndexChanging" OnRowDataBound="GridView1_RowDataBound"
GridLines="None">
<Columns>
<asp:BoundField HeaderText="User ID" DataField="UserID" />
<asp:BoundField HeaderText="User Name" DataField="Username" />
<asp:BoundField HeaderText="Department" DataField="Department" />
<asp:BoundField HeaderText="Division" DataField="Division" />
<asp:CommandField HeaderText="OPT" ShowDeleteButton="True" ShowEditButton="True" />
</Columns>

RowDating代碼如下:

protected void GridView1_RowUpdating(object sender, GridViewUpdateEventArgs e)
{
//  Response.Write(GridView1.DataKeys[e.RowIndex].Values[0].ToString()+"<br />");     //通過這兩行才發現問題的。
//  Response.Write(((TextBox)this.GridView1.Rows[e.RowIndex].Cells[1].Controls[0]).Text);
string UserID=GridView1.DataKeys[e.RowIndex].Values[0].ToString();
string Username=((TextBox)this.GridView1.Rows[e.RowIndex].Cells[1].Controls[0]).Text;
string Department=((TextBox)this.GridView1.Rows[e.RowIndex].Cells[2].Controls[0]).Text;
string Division=((TextBox)this.GridView1.Rows[e.RowIndex].Cells[3].Controls[0]).Text;
string connstr="Server=服務器為;UID=用戶名;PWD=密碼;Database=test;";
string sqlstr="UPDATE UserInfo SET Username='"+Username+"',Department='"+Department+"',Company='"+Company+"' WHERE UserID='"+UserID+"'";
try
{
SqlConnection conn=new SqlConnection(connstr);
if(conn.State.ToString()=="Closed") conn.Open();
SqlCommand comm=new SqlCommand(sqlstr,conn);
comm.ExecuteNonQuery();
comm.Dispose();
if(conn.State.ToString()=="Open") conn.Close();
GridView1.EditIndex=-1;
GridViewBind();
}
catch(Exception ex)
{
Response.Write("Database Error, Reason: "+ex.Message);
}
}

趕緊記下供以后參考。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

林口县| 图们市| 汤原县| 景洪市| 宿松县| 彩票| 西平县| 广南县| 交口县| 大城县| 静安区| 万年县| 乳山市| 竹山县| 遂溪县| 长丰县| 封开县| 浦城县| 稻城县| 大同县| 丹阳市| 花垣县| 兴安盟| 正安县| 新竹市| 安远县| 宝兴县| 元氏县| 全椒县| 福清市| 北宁市| 阜南县| 慈利县| 全椒县| 白银市| 河津市| 商水县| 丽江市| 仲巴县| 连云港市| 酒泉市|