我在同一頁設計一個 DetailsView1 (預設為新增模式)、GridView1、GridView2
當每日 DetailsView1 新增的資料,都會顯示在 GridView1 上
GridView2設計了一個搜尋,為多個SQL Table join出來的8個值
按下GridView2欄位內的選取後,要傳給 DetailsView1 的8個 TextBox
DetailsView1(已經轉成樣板)要接收的名稱是
TextBox4、TextBox41、TextBox5、TextBox51、TextBox6、TextBox61、TextBox8、TextBox14
protected void Button1_Click(object sender, EventArgs e)
{
for (int i = 0; i < GridView2.Rows.Count; i++)
{
string strValue = GridView2.Rows[i].Cells[0].Text.ToString().Trim();
TextBox TB4 = (TextBox)DetailsView1.FindControl("TextBox4");
TextBox TB41 = (TextBox)DetailsView1.FindControl("TextBox41");
TextBox TB5 = (TextBox)DetailsView1.FindControl("TextBox5");
TextBox TB51 = (TextBox)DetailsView1.FindControl("TextBox51");
TextBox TB6 = (TextBox)DetailsView1.FindControl("TextBox6");
TextBox TB61 = (TextBox)DetailsView1.FindControl("TextBox61");
TextBox TB8 = (TextBox)DetailsView1.FindControl("TextBox8");
TextBox TB14 = (TextBox)DetailsView1.FindControl("TextBox14");
TB4.Text = (strValue[0].ToString());
TB41.Text = (strValue[1].ToString());
TB5.Text = (strValue[2].ToString());
TB51.Text = (strValue[3].ToString());
TB6.Text = (strValue[4].ToString());
TB61.Text = (strValue[5].ToString());
TB8.Text = (strValue[6].ToString());
TB14.Text = (strValue[7].ToString());
}
}
前面程式都正常,當搜尋到資料後,在GridView2下選擇其中一筆資料,按下選取後,會出現
--懇請大師指點12~~謝謝
strValue可能是0長度字串或NULL空值,所以 strValue[0] 為超過索引值界限
所以你該做的事,就是
if(strValue!=null)
{
if(strValue.Length>0)
TB4.Text = (strValue[0].ToString());
if(strValue.Length>1)
TB41.Text = (strValue[1].ToString());
if(strValue.Length>2)
TB5.Text = (strValue[2].ToString());
if(strValue.Length>3)
TB51.Text = (strValue[3].ToString());
if(strValue.Length>4)
TB6.Text = (strValue[4].ToString());
// ............................後面偷懶1000001行
}
//你迴圈strValue 都還沒全部塞完東西 就急著把值給其他人當然壞
protected void Button1_Click(object sender, EventArgs e)
{
for (int i = 0; i < GridView2.Rows.Count; i++)
{
string strValue = GridView2.Rows[i].Cells[0].Text.ToString().Trim();
TextBox TB4 = (TextBox)DetailsView1.FindControl("TextBox4");
TextBox TB41 = (TextBox)DetailsView1.FindControl("TextBox41");
TextBox TB5 = (TextBox)DetailsView1.FindControl("TextBox5");
TextBox TB51 = (TextBox)DetailsView1.FindControl("TextBox51");
TextBox TB6 = (TextBox)DetailsView1.FindControl("TextBox6");
TextBox TB61 = (TextBox)DetailsView1.FindControl("TextBox61");
TextBox TB8 = (TextBox)DetailsView1.FindControl("TextBox8");
TextBox TB14 = (TextBox)DetailsView1.FindControl("TextBox14");
TB4.Text = (strValue[0].ToString());
//第一次近來 i = 0 當然只有strValue[0]有值
TB41.Text = (strValue[1].ToString());
TB5.Text = (strValue[2].ToString());
TB51.Text = (strValue[3].ToString());
TB6.Text = (strValue[4].ToString());
TB61.Text = (strValue[5].ToString());
TB8.Text = (strValue[6].ToString());
TB14.Text = (strValue[7].ToString());
}
}
調整
至於要不要額外增加樓上回答的檢核就看你的需求
protected void Button1_Click(object sender, EventArgs e)
{
for (int i = 0; i < GridView2.Rows.Count; i++)
{
string strValue = GridView2.Rows[i].Cells[0].Text.ToString().Trim();
}
TextBox TB4 = (TextBox)DetailsView1.FindControl("TextBox4");
TextBox TB41 = (TextBox)DetailsView1.FindControl("TextBox41");
TextBox TB5 = (TextBox)DetailsView1.FindControl("TextBox5");
TextBox TB51 = (TextBox)DetailsView1.FindControl("TextBox51");
TextBox TB6 = (TextBox)DetailsView1.FindControl("TextBox6");
TextBox TB61 = (TextBox)DetailsView1.FindControl("TextBox61");
TextBox TB8 = (TextBox)DetailsView1.FindControl("TextBox8");
TextBox TB14 = (TextBox)DetailsView1.FindControl("TextBox14");
TB4.Text = (strValue[0].ToString());
TB41.Text = (strValue[1].ToString());
TB5.Text = (strValue[2].ToString());
TB51.Text = (strValue[3].ToString());
TB6.Text = (strValue[4].ToString());
TB61.Text = (strValue[5].ToString());
TB8.Text = (strValue[6].ToString());
TB14.Text = (strValue[7].ToString());
}
至於strValue 到底有沒有成功帶值進去
還是要Debug模式下中斷點才知道
把變數提出,改成下方,還是一樣
真怪
我最後一格是選取按鈕
是選取按鈕沒辦法放進strValue內嗎?
protected void Button1_Click(object sender, EventArgs e)
{
string strValue = null;
for (int i = 0; i < GridView2.Rows.Count; i++)
{
strValue = GridView2.Rows[i].Cells[0].Text.ToString().Trim();
}
TextBox TB4 = (TextBox)DetailsView1.FindControl("TextBox4");
TextBox TB41 = (TextBox)DetailsView1.FindControl("TextBox41");
TextBox TB5 = (TextBox)DetailsView1.FindControl("TextBox5");
TextBox TB51 = (TextBox)DetailsView1.FindControl("TextBox51");
TextBox TB6 = (TextBox)DetailsView1.FindControl("TextBox6");
TextBox TB61 = (TextBox)DetailsView1.FindControl("TextBox61");
TextBox TB8 = (TextBox)DetailsView1.FindControl("TextBox8");
TextBox TB14 = (TextBox)DetailsView1.FindControl("TextBox14");
TB4.Text = strValue[1].ToString();
TB41.Text = strValue[2].ToString();
TB5.Text = strValue[3].ToString();
TB51.Text = strValue[4].ToString();
TB6.Text = strValue[5].ToString();
TB61.Text = strValue[6].ToString();
TB8.Text = strValue[7].ToString();
TB14.Text = strValue[8].ToString();
}
抱歉,剛接觸ASPNET
沒DEBUG過,初步看好像還是顯示一樣的問題
不好意思請教一下大大
可是他的錯誤訊息是在(strValue[0].ToString())就有了
不是代表strValue[0]就有問題了嗎?
我猜您的寫法是參考這篇
幫您找到這篇
我猜您strValue宣告的應該不是陣列
依照我的理解修改過後如下
protected void Button1_Click(object sender, EventArgs e){
string[] strValue = new string[GridView2.Rows.Count];
for (int i = 0; i < GridView2.Rows.Count; i++){
strValue[i] = GridView2.Rows[i].Cells[0].Text.ToString().Trim();
}
TextBox TB4 = (TextBox)DetailsView1.FindControl("TextBox4");
TextBox TB41 = (TextBox)DetailsView1.FindControl("TextBox41");
TextBox TB5 = (TextBox)DetailsView1.FindControl("TextBox5");
TextBox TB51 = (TextBox)DetailsView1.FindControl("TextBox51");
TextBox TB6 = (TextBox)DetailsView1.FindControl("TextBox6");
TextBox TB61 = (TextBox)DetailsView1.FindControl("TextBox61");
TextBox TB8 = (TextBox)DetailsView1.FindControl("TextBox8");
TextBox TB14 = (TextBox)DetailsView1.FindControl("TextBox14");
TB4.Text = (strValue[0].ToString());
TB41.Text = (strValue[1].ToString());
TB5.Text = (strValue[2].ToString());
TB51.Text = (strValue[3].ToString());
TB6.Text = (strValue[4].ToString());
TB61.Text = (strValue[5].ToString());
TB8.Text = (strValue[6].ToString());
TB14.Text = (strValue[7].ToString());
}
因為還未接觸到 ASP.NET所以經驗不足
可能理解或回答有誤再麻煩前輩們輕鞭:D
感謝提醒,一開始沒用陣列,所以值放不下
修正後又測試了一些語法
感覺是
(strValue[0].ToString())
的問題
因為值傳不進TextBox裡
點按鈕沒反應
沒有報錯以及確認您的按鈕函式在正常情況下沒有問題
嘗試以下做法
1.先當strValue[0].ToString()出錯,因此試試
TB4.Text = "123";
(1)無東西的話(應該是會有)
代表(TextBox)DetailsView1.FindControl("TextBox4")
有問題
不過我剛找了一下FindControl的用法,這段應該不會有問題才對
更有可能的是您的function跟按鈕根本沒連結到
(2)有東西的話試試
TB4.Text = strValue[0].ToString();
/*or*/
TB4.Text = strValue[0];
/*還是不行的話再麻煩您先將strValue[0] output出來
看值到底長怎樣*/
因為我也沒寫過ASP.NET,不熟語法,加上沒有環境測試
以上皆為個人猜測
只能一步一步拆(猜),看到哪邊之前是OK哪邊之後才有錯誤
稍微側了一下
string[] strValue = { "AAA", "BBB", "CCC", "DDD", "EEE", "FFF" };
TextBox TB4 = (TextBox)DetailsView1.FindControl("TextBox4");
TextBox TB41 = (TextBox)DetailsView1.FindControl("TextBox41");
TextBox TB5 = (TextBox)DetailsView1.FindControl("TextBox5");
TB4.Text = strValue[0].ToString();
TB41.Text = strValue[1].ToString();
TB5.Text = strValue[2];
可以傳資料AAA.BBB.CCC到各個TextBox內
所以看來應該是上方陣列根本沒取到GridView2的值
也就是說
for (int i = 0; i < GridView2.Rows.Count; i++){
strValue[i] = GridView2.Rows[i].Cells[0].Text.ToString().Trim();
}
這段出了問題
那你將GridView2.Rows.Count
輸出出來
看值是多少
或是試試strValue[0] = GridView2.Rows[0].Cells[0].Text.ToString().Trim();
並輸出出來
我嘗試用兩個for寫,一樣取不到值
我的想法是
GridView2.Rows.Count→取得第i行
GridView2.Columns.Count→取得第j列
所以延伸出
strValue[i] = GridView2.Rows[i].Cells[j].Text.ToString();
我先取得第i行後,在取得第j列的資料
最後strValue[2].ToString() 才會有資料
結果還是沒資料@@
string[] strValue = new string[GridView2.Columns.Count];
for (int i = 0; i < GridView2.Rows.Count; i++)
{
for (int j = 0; j < GridView2.Columns.Count; j++)
{
strValue[i] = GridView2.Rows[i].Cells[j].Text.ToString();
}
}
TextBox TB4 = (TextBox)DetailsView1.FindControl("TextBox4");
TB4.Text = strValue[1].ToString();
如果用strValue[0]
會顯示
並未將物件參考設定為物件的執行個體。
你越寫越混亂了......
先試試GridView2.Rows[0].Cells[0].Text.ToString().Trim()
到底有沒有值
再來考慮要取哪裡
如果用strValue[0]
會顯示
並未將物件參考設定為物件的執行個體
應該您沒宣告陣列大小
也就是說要不是GridView2.Rows.Count就是 GridView2.Columns.Count有問題
如何檢查問題?將它輸出就知道了
沒取到值
後來改成正確的
GridView2.Columns.Count是每行欄位數
所以這個才夠放
string[] strValue = new string[GridView2.Columns.Count];
不過還是沒取到值
目前先用一格一格的方式取值
徒法煉鋼@@~
有空再回來試這一筆
哈哈 我對這語法並不熟悉,所以我也怕我把您越帶越偏
因為目前看起來問題越挖越大,建議您參考一下
(1)提供您DetailsView1、GridView1、GridView2的code
(2)以圖示方式加以敘述樣板之間想如何傳送接收資訊
(3)結合目前的程式碼及遇到的問題重新發問