8

このエラーが発生します:タイプ「System.Web.UI.LiteralControl」のオブジェクトをタイプ「System.Web.Controls.TextBox」にキャストできません</ p>

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。ヘルプ。ありがとう

4

2 に答える 2

11

問題はここにあります:

(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?
}
于 2012-10-19T17:11:23.760 に答える
5

問題は、Gridviews を使用していて、DataboundフィールドをItemTemplatesに変換し、たとえばテキスト ボックスをEditItemTemplateに追加し、そのテキスト ボックスに独自の ID を追加する場合です見つからない場合、テキスト ボックスの 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;
于 2015-11-16T21:48:47.323 に答える