2012-10-19 34 views
6

我收到此錯誤: 無法投射類型爲'System.Web.UI.LiteralControl'的對象以鍵入'System.Web.Controls。文本框」無法投射類型爲'System.Web.UI.LiteralControl'的對象錯誤

我從ASPX頁面查詢字符串餵養我的文本輸入框,在這裏是代碼:

<EditItemTemplate> 
         <asp:TextBox ID="GV_Post_ID" runat="server" text='<%# Request.QueryString["Post_ID"] %>'></asp:TextBox> 
        </EditItemTemplate> 

但是當我運行它,它止於此:

cmd.Parameters.Add("@Post_ID", SqlDbType.VarChar).Value = ((TextBox)GV_InlineEditing.Rows[0].Cells[2].Controls[0]).Text; 

我得到了上面的錯誤。這是後面的代碼:

SqlConnection con = new SqlConnection(ConfigurationManager.ConnectionStrings["DSRConnectionString"].ConnectionString); 
      SqlCommand cmd = new SqlCommand(); 
      cmd.CommandText = "INSERT INTO RCA_Events(Post_ID, Date, Description) VALUES(@Post_ID, @Date, @Description)"; 
      cmd.Parameters.Add("@Post_ID", SqlDbType.VarChar).Value = ((TextBox)GV_InlineEditing.Rows[0].Cells[2].Controls[0]).Text; 
      cmd.Parameters.Add("@Date", SqlDbType.VarChar).Value = ((TextBox)GV_InlineEditing.Rows[0].Cells[3].Controls[0]).Text; 
      cmd.Parameters.Add("@Description", SqlDbType.VarChar).Value = ((TextBox)GV_InlineEditing.Rows[0].Cells[4].Controls[0]).Text; 

請注意,如果我從ASPX頁面中刪除查詢字符串,然後我將值手動,然後它工作。 PLS。幫幫我。 感謝

回答

9

的問題是在這裏:

(TextBox)GV_InlineEditing.Rows[0].Cells[2].Controls[0]

單元格中的第一控制是不是你認爲它是TextBox。我們假設GV_InlineEditing.Rows[0]正在安全地向您提供所需的行。做這樣的事情:

TextBox myTextBox = GV_InlineEditing.Rows[0].FindControl("GV_Post_ID") as TextBox; 
cmd.Parameters.Add("@Post_ID", SqlDbType.VarChar).Value = myTextBox.Text; 

該代碼可以更加安全的是這樣的:

TextBox myTextBox = GV_InlineEditing.Rows[0].FindControl("GV_Post_ID") as TextBox; 
if (myTextBox != null) 
{ 
    cmd.Parameters.Add("@Post_ID", SqlDbType.VarChar).Value = myTextBox.Text; 
} 
else 
{ 
    // Do something here. Default value for the post id? 
} 
+1

太感謝你了。這解決了我的問題。 – moe

+1

@Gromer:謝謝男人,它拯救了我的一天..已解決 – BNN

3

問題是,當你使用GridView的,你轉換數據綁定領域爲的ItemTemplate,和例如,將文本框添加到EditItemTemplate,然後將其自己的ID添加到該文本框,例如txtProduct,函數.controls [0] won'找不到它,它不知道你的文本框的ID,所以在這種情況下,你將不得不提供你想要的文本框的ID。因此,而不是使用.Controls [0]您應該使用.FindControl(「txtProduct」)。你的情況,而不是:

(TextBox)GV_InlineEditing.Rows[0].Cells[2].Controls[0].Text; 

你應該這樣做:

(TextBox)GV_InlineEditing.Rows[0].Cells[2].FindControl("GV_Post_ID").Text; 
相關問題