关于asp.net从入门到精通的一个例子问题
发表在ASP.NET图书答疑 2009-03-07
是否精华
版块置顶:
我正在学习asp.net从入门到精通这本书,感觉这本书整体的知识点还是非常不错的,但是我在做例子的时候在第10章中10.1.10这一节中,就是GridView控件中更新数据(RowUpdating)的事件中,
((TextBox)(GridView1.Rows[e.RowIndex].Cells[1].Controls[0])).Text.ToString();这一句出错了,错误提示为:无法将类型为“System.Web.UI.LiteralControl”的对象强制转换为类型“System.Web.UI.WebControls.TextBox”。我在网上也搜索了很长的时间,没有发现其解决的方法。
我也是一个编程的新手,还请各位老师们帮我看看这个错误应该怎么解决,怎么去改写他好。
分享到:
精彩评论 3
Confidence2009
学分:0 LV1
2009-03-10
沙发
你好!
我们图书中提供的实例及光盘里的源代码运行是没有错的吧
你是照着我们的例子自己做的吧,那么数据库你是自己设计的,还是应用这节中该实例的数据库,如果是自己设计的数据库你的数据库字段中要设置一个主键值,((TextBox)(GridView1.Rows[e.RowIndex].Cells[1].Controls[0])).Text.ToString();该名中e.RowIndex需要获取数据库中的主键值。
如果你照着做的这个实例如果还有问题就给我们发帖,我们在不太繁忙的情况下会给你全力解答!
bighsc
学分:0 LV1
2009-03-14
板凳
数据库是我自己写的,主键我也设置了,但是还是不行,这样吧我把代码给贴出来,麻烦纠正一下!
我先把库结构贴一下:id   int   主键自动增长不为空
                    userName varchar(20)  不为空
                    sex varchar(4) 不为空
                    BirthDate varchar(20)    不为空
                    Addresss varchar(50)    不为空

Vs2008中的代码为:
public partial class _Default : System.Web.UI.Page 
{
    protected void Page_Load(object sender, EventArgs e) 
    {
        if (!this.IsPostBack)
        {
            
            //ViewState为保存服务器控件视图状态
            ViewState["SortOrder"] = "id";
            ViewState["OrderDire"] = "ASC";
            gridviewBind();
        }
    }
    /// <summary>
    /// 绑定GridView控件
    /// </summary>
    private void gridviewBind()
    {
        SqlConnection conn = new SqlConnection("server=.;database=employees;uid=sa;pwd=sa;");
        conn.Open();
        string strSql = "select * from employees";
        SqlDataAdapter sda = new SqlDataAdapter(strSql, conn);
        DataSet ds = new DataSet();
        sda.Fill(ds, "emp");
        DataView dv = ds.Tables["emp"].DefaultView;
        string sort = ViewState["SortOrder"] + " " + ViewState["OrderDire"];//定义排序表达式
        dv.Sort = sort;//让dv数据表视图的排序方式为已经定义好的sort
        GridView1.DataKeyNames = new string[] { "id" };
        GridView1.DataSource = ds;
        GridView1.DataBind();
    }
    /// <summary>
    /// 实现翻页
    /// </summary>
    /// <param name="sender"></param>
    /// <param name="e"></param>
    protected void GridView1_PageIndexChanging(object sender, GridViewPageEventArgs e)
    {
        GridView1.PageIndex = e.NewPageIndex;
        gridviewBind();
    }
    /// <summary>
    /// 实现排序
    /// </summary>
    /// <param name="sender"></param>
    /// <param name="e"></param>
    protected void GridView1_Sorting(object sender, GridViewSortEventArgs e)
    {
        string sPage = e.SortExpression;//获取GridView的排序表达式并赋值给sPage这个字符变量
        if (ViewState["SortOrder"].ToString()==sPage)
        {
            if (ViewState["OrderDire"].ToString()=="Desc")
            {
                ViewState["OrderDire"] = "ASC";
            }
            else
            {
                ViewState["OrderDire"] = "Desc";
            }
        }
        else
        {
            ViewState["SortOrder"] = e.SortExpression;
        }
        gridviewBind();
    }
    protected void chkAll_CheckedChanged(object sender, EventArgs e)
    {
        for (int i = 0; i <= GridView1.Rows.Count-1; i++)
        {
            //建立模板列中的CheckBox控件的引用
            CheckBox chk = (CheckBox)GridView1.Rows[i].FindControl("chkCheck");
            if (chkAll.Checked==true)
            {
                chk.Checked = true;
            }
            else
            {
                chk.Checked = false;
            }
        }
    }
    protected void GridView1_RowEditing(object sender, GridViewEditEventArgs e)
    {
        this.GridView1.EditIndex = e.NewEditIndex;
        gridviewBind();
    }
    protected void GridView1_RowCancelingEdit(object sender, GridViewCancelEditEventArgs e)
    {
        this.GridView1.EditIndex = -1;
        gridviewBind();
    }
    protected void GridView1_RowUpdating(object sender, GridViewUpdateEventArgs e)
    {
        string empID = GridView1.DataKeys[e.RowIndex].Value.ToString();
        string username = ((TextBox)(GridView1.Rows[e.RowIndex].Cells[1].Controls[0])).Text.ToString();
        string sex = ((TextBox)(GridView1.Rows[e.RowIndex].Cells[2].Controls[0])).Text.ToString();
        string BirthDate = ((TextBox)(GridView1.Rows[e.RowIndex].Cells[3].Controls[0])).Text.ToString();
        string Addresss = ((TextBox)(GridView1.Rows[e.RowIndex].Cells[4].Controls[0])).Text.ToString();
        string sqlStr = "update employees set userName='" + username + "',sex='" + sex + "',BirthDate='" + BirthDate + "',Addresss='" + Addresss + "' where id='" + empID + "'";
        SqlConnection conn = new SqlConnection("server=.;database=employees;uid=sa;pwd=sa;");
        conn.Open();
        SqlCommand cmd = new SqlCommand(sqlStr, conn);
        cmd.ExecuteNonQuery();
        cmd.Dispose();
        conn.Close();
        this.GridView1.EditIndex = -1;
        gridviewBind();
    }
    protected void GridView1_RowDataBound(object sender, GridViewRowEventArgs e)
    {
        if (e.Row.RowType==DataControlRowType.DataRow)
        {
            e.Row.Attributes.Add("onmouseover","c=this.style.backgroundColor;this.style.backgroundColor='#6699ff'");
            e.Row.Attributes.Add("onmouseout", "this.style.backgroundColor=c;");
        }
    }
Confidence2009
学分:0 LV1
2009-03-17
地板
 你好!
你插一个断点试一下吧,找一下错误出处,你这里实现的编辑等功能都是GridView控件自带的功能,代码我看了好象没有错误,你的数据库设计你在参照下我们图书光盘中给的类似这个实例的数据设计。
还有你把这段代码改下:
string empID = GridView1.DataKeys[e.RowIndex].Value.ToString();
string username = ((TextBox)(GridView1.Rows[e.RowIndex].Cells[1].Controls[0])).Text.ToString();
string sex = ((TextBox)(GridView1.Rows[e.RowIndex].Cells[2].Controls[0])).Text.ToString();
string BirthDate = ((TextBox)(GridView1.Rows[e.RowIndex].Cells[3].Controls[0])).Text.ToString();
string Addresss = ((TextBox)(GridView1.Rows[e.RowIndex].Cells[4].Controls[0])).Text.ToString();
string sqlStr = "update employees set userName='" + username + "',sex='" + sex + "',BirthDate='" + BirthDate + "',Addresss='" + Addresss + "' where id='" + empID + "'";
改成:
string sqlStr = "update employees set userName='" + ((TextBox)(GridView1.Rows[e.RowIndex].Cells[1].Controls[0])).Text.ToString().Trim()+ "',sex='" + ((TextBox)(GridView1.Rows[e.RowIndex].Cells[2].Controls[0])).Text.ToString().Trim()+ "',BirthDate='" + ((TextBox)(GridView1.Rows[e.RowIndex].Cells[3].Controls[0])).Text.ToString().Trim()+ "',Addresss='" + ((TextBox)(GridView1.Rows[e.RowIndex].Cells[4].Controls[0])).Text.ToString().Trim()+ "' where id='" + GridView1.DataKeys[e.RowIndex].Value.ToString()+ "'";
这里你要保证数据库中id字段设置了为主键。
如果还不行,你在给我发下帖子,先插入断点试下找下错误出处。
首页上一页 1 下一页尾页 3 条记录 1/1页
手机同步功能介绍
友情提示:以下图书配套资源能够实现手机同步功能
明日微信公众号
明日之星 明日之星编程特训营
客服热线(每日9:00-17:00)
400 675 1066
mingrisoft@mingrisoft.com
吉林省明日科技有限公司Copyright ©2007-2022,mingrisoft.com, All Rights Reserved长春市北湖科技开发区盛北大街3333号长春北湖科技园项目一期A10号楼四、五层
吉ICP备10002740号-2吉公网安备22010202000132经营性网站备案信息 营业执照