2012-10-19 29 views
6

このエラーが発生しました: 'System.Web.UI.LiteralControl'タイプのオブジェクトを 'System.Web.Controls'にキャストすることができません。 TextBoxの」'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

をおGridviewsを使用しているときに問題があるとあなたがItemTemplatesデータバインドフィールドを変換し、 EditItemTemplateにテキストボックスを追加し、そのテキストボックスに独自のIDを追加します。たとえば、txtProductのように、それを見つけると、それはあなたのテキストボックスのIDを知らないので、この場合、あなたがターゲットにしたいTextBoxの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;