datalist实现增删改 分页

wangjun3242 2009-10-25 06:44:59
using System;
using System.Data;
using System.Configuration;
using System.Collections;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Web.UI.HtmlControls;
using System.Data.SqlClient;
using System.IO;

public partial class index : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
if (!Page.IsPostBack)
{
Bind();
}

}
public void Bind()
{
string strCon = "Data Source=355146557A47426\\SQLEXPRESS;Initial Catalog=stuinfo;Integrated Security=True";
SqlConnection con = new SqlConnection(strCon);
con.Open();
string strSql = "select * from stuinfo";
SqlDataAdapter da = new SqlDataAdapter(strSql, con);
DataSet ds = new DataSet();
da.Fill(ds);
PagedDataSource ps = new PagedDataSource();
ps.AllowPaging = true;
ps.DataSource = ds.Tables[0].DefaultView;

int curpage;
if (Request.QueryString["page"] != null)
{
curpage = Convert.ToInt32(Request.QueryString["page"]);
}
else
{
curpage = 1;
}
ps.CurrentPageIndex = curpage - 1;
ps.PageSize = 2;
int count = ds.Tables[0].DefaultView.Count / ps.PageSize;
if (ds.Tables[0].DefaultView.Count % ps.PageSize != 0)
{
count++;
}
this.Label1.Text = "当前页:" + curpage.ToString() + " 共" + count.ToString() + "页";
this.HyperLink3.NavigateUrl = Request.CurrentExecutionFilePath;
if (!ps.IsFirstPage)
{
this.HyperLink1.NavigateUrl = Request.CurrentExecutionFilePath + "?page=" + (curpage - 1);
}

if (!ps.IsLastPage)
{
this.HyperLink2.NavigateUrl = Request.CurrentExecutionFilePath + "?page=" + (curpage + 1);
}
this.HyperLink4.NavigateUrl = Request.CurrentExecutionFilePath + "?page=" + count;
this.DataList1.DataSource = ps;
this.DataList1.DataBind();
con.Close();
}

protected void DataList1_EditCommand(object source, DataListCommandEventArgs e)
{
this.DataList1.EditItemIndex = e.Item.ItemIndex;
Bind();
}
protected void DataList1_DeleteCommand(object source, DataListCommandEventArgs e)
{

string sql = (this.DataList1.DataKeys[e.Item.ItemIndex]).ToString().Trim();
string strSq = "delete stuinfo where id= " + sql + "";
string strCon = "Data Source=355146557A47426\\SQLEXPRESS;Initial Catalog=stuinfo;Integrated Security=True";
SqlConnection con = new SqlConnection(strCon);
con.Open();
SqlCommand com = new SqlCommand(strSq, con);
com.ExecuteNonQuery();
con.Close();
Bind();

}
protected void DataList1_CancelCommand(object source, DataListCommandEventArgs e)
{
this.DataList1.EditItemIndex = -1;
}
protected void DataList1_UpdateCommand(object source, DataListCommandEventArgs e)
{

string strName = ((TextBox)this.DataList1.Items[e.Item.ItemIndex].FindControl("TextBox1")).Text.ToString();
string strSq = "update stuinfo set name ='" + strName + "' where id= " + this.DataList1.DataKeys[e.Item.ItemIndex].ToString() + "";
string strCon = "Data Source=355146557A47426\\SQLEXPRESS;Initial Catalog=stuinfo;Integrated Security=True";
SqlConnection con = new SqlConnection(strCon);
con.Open();
SqlCommand com = new SqlCommand(strSq, con);
com.ExecuteNonQuery();
this.DataList1.EditItemIndex = -1;
con.Close();
Bind();

}
protected void DataList1_ItemDataBound(object sender, DataListItemEventArgs e)
{
if (e.Item.ItemType == ListItemType.Item || e.Item.ItemType == ListItemType.AlternatingItem)
{
e.Item.Attributes.Add("onmouseover", "c=this.stle.backgroundColor,this.style.backgroundColor='#223344'");
e.Item.Attributes.Add("onmouseout", "this.style.backgroundColor=c");
((Button)e.Item.FindControl("Button4")).Attributes.Add("onclick", "return confirm('是否删除')");
}

}
protected void Button2_Click(object sender, EventArgs e)
{
string str = "image/"+this.FileUpload1.FileName;
String fileExtension = System.IO.Path.GetExtension(FileUpload1.FileName).ToLower();
string strPath = Server.MapPath(str);
FileUpload1.PostedFile.SaveAs(strPath);
string strSq = "insert into stuinfo(name,sex,age,pwd,image)";
strSq += "values('" + this.TextBox1.Text + "'," + this.RadioButtonList1.SelectedIndex + ",'" + this.TextBox2.Text + "','" + this.TextBox3.Text + "','" + str + "') ";
string strCon = "Data Source=355146557A47426\\SQLEXPRESS;Initial Catalog=stuinfo;Integrated Security=True";
SqlConnection con = new SqlConnection(strCon);
con.Open();
SqlCommand com = new SqlCommand(strSq, con);
com.ExecuteNonQuery();
con.Close();
Bind();
}
}
上面是完整代码 调试点编辑提示
string strName = ((TextBox)this.DataList1.Items[e.Item.ItemIndex].FindControl("TextBox1")).Text.ToString();
未将对象引用设置到对象的实例
点删除提示
string sql = (this.DataList1.DataKeys[e.Item.ItemIndex]).ToString().Trim();
索引超出范围。必须为非负值并小于集合大小。
寻求解决方法 如有更合适的写法可再加分
...全文
97 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
binhu12332100 2009-10-28
  • 打赏
  • 举报
回复
看我的吧,我前段时间刚做的,我们做的很像,你可以参考下,看对你有用没?有用的话记着给我分哦(绝对正确哦)

using System;
using System.Collections;
using System.Configuration;
using System.Data;
using System.Linq;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.HtmlControls;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Xml.Linq;
using System.Data.SqlClient;

namespace GridView练习
{
public partial class DataList练习2 : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
if (!IsPostBack)
{
Bind();
}
}

public DataSet GetData()
{
string sql = "select * from TestDB.dbo.Student";
DataSet ds = new DataSet();
using (SqlConnection conn = new SqlConnection("Server=XATUSLX-GBH;DataBase=TestDB;user=sa;pwd=sa"))
{
conn.Open();
SqlCommand cmd = new SqlCommand(sql, conn);
SqlDataAdapter sda = new SqlDataAdapter(cmd);
sda.Fill(ds);
}
return ds;
}

public void Bind()
{
this.DataList1.DataSource = GetData();
this.DataList1.DataBind();
}

protected void DataList1_CancelCommand(object source, DataListCommandEventArgs e)
{
this.DataList1.EditItemIndex = -1;
Bind();
}

protected void DataList1_DeleteCommand(object source, DataListCommandEventArgs e)
{
int id = Convert.ToInt32(((LinkButton)(this.DataList1.Items[e.Item.ItemIndex].FindControl("LinkButton2"))).CommandArgument);
DeleteData(id);
Bind();
}

public void DeleteData(int id)
{
string sql = "delete from TestDB.dbo.Student where id="+id+"";
using (SqlConnection conn = new SqlConnection("Server=XATUSLX-GBH;DataBase=TestDB;user=sa;pwd=sa"))
{
conn.Open();
SqlCommand cmd = new SqlCommand(sql,conn);
cmd.ExecuteNonQuery();
}
}
protected void DataList1_EditCommand(object source, DataListCommandEventArgs e)
{
this.DataList1.EditItemIndex = e.Item.ItemIndex;
Bind();
}

protected void DataList1_UpdateCommand(object source, DataListCommandEventArgs e)
{
int id = Convert.ToInt32(((LinkButton)(this.DataList1.Items[e.Item.ItemIndex].FindControl("LinkButton3"))).CommandArgument);
string name = ((TextBox)(this.DataList1.Items[e.Item.ItemIndex].FindControl("TextBox2"))).Text;
int age = Convert.ToInt32(((TextBox)(this.DataList1.Items[e.Item.ItemIndex].FindControl("TextBox3"))).Text);
UpdateData(name, age, id);
this.DataList1.EditItemIndex = -1;
Bind();
}

public void UpdateData(string name, int age, int id)
{
string sql = "update TestDB.dbo.Student set name='"+name+"',age="+age+" where id="+id+"";
using (SqlConnection conn = new SqlConnection("Server=XATUSLX-GBH;DataBase=TestDB;user=sa;pwd=sa"))
{
conn.Open();
SqlCommand cmd = new SqlCommand(sql,conn);
cmd.ExecuteNonQuery();
}
}
}
}

对了,你要记得在.aspx(Html)里面做些修改,比如在编辑的行上加上CommandName=Edit,修改的行上加上CommandName=Update,之类的,相信你都知道,只是提醒下你而已……
wangjun3242 2009-10-28
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 binhu12332100 的回复:]
看我的吧,我前段时间刚做的,我们做的很像,你可以参考下,看对你有用没?有用的话记着给我分哦(绝对正确哦)

using System;
using System.Collections;
using System.Configuration;
using System.Data;
using System.Linq;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.HtmlControls;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Xml.Linq;
using System.Data.SqlClient;

namespace GridView练习
{
    public partial class DataList练习2 : System.Web.UI.Page
    {
        protected void Page_Load(object sender, EventArgs e)
        {
            if (!IsPostBack)
            {
                Bind();
            }
        }

        public DataSet GetData()
        {
            string sql = "select * from TestDB.dbo.Student";
            DataSet ds = new DataSet();
            using (SqlConnection conn = new SqlConnection("Server=XATUSLX-GBH;DataBase=TestDB;user=sa;pwd=sa"))
            {
                conn.Open();
                SqlCommand cmd = new SqlCommand(sql, conn);
                SqlDataAdapter sda = new SqlDataAdapter(cmd);
                sda.Fill(ds);
            }
            return ds;
        }

        public void Bind()
        {
            this.DataList1.DataSource = GetData();
            this.DataList1.DataBind();
        }

        protected void DataList1_CancelCommand(object source, DataListCommandEventArgs e)
        {
            this.DataList1.EditItemIndex = -1;
            Bind();
        }

        protected void DataList1_DeleteCommand(object source, DataListCommandEventArgs e)
        {
            int id = Convert.ToInt32(((LinkButton)(this.DataList1.Items[e.Item.ItemIndex].FindControl("LinkButton2"))).CommandArgument);
            DeleteData(id);
            Bind();
        }

        public void DeleteData(int id)
        {
            string sql = "delete from TestDB.dbo.Student where id="+id+"";
            using (SqlConnection conn = new SqlConnection("Server=XATUSLX-GBH;DataBase=TestDB;user=sa;pwd=sa"))
            {
                conn.Open();
                SqlCommand cmd = new SqlCommand(sql,conn);
                cmd.ExecuteNonQuery();
            }
        }
        protected void DataList1_EditCommand(object source, DataListCommandEventArgs e)
        {
            this.DataList1.EditItemIndex = e.Item.ItemIndex;
            Bind();
        }

        protected void DataList1_UpdateCommand(object source, DataListCommandEventArgs e)
        {
            int id = Convert.ToInt32(((LinkButton)(this.DataList1.Items[e.Item.ItemIndex].FindControl("LinkButton3"))).CommandArgument);
            string name = ((TextBox)(this.DataList1.Items[e.Item.ItemIndex].FindControl("TextBox2"))).Text;
            int age = Convert.ToInt32(((TextBox)(this.DataList1.Items[e.Item.ItemIndex].FindControl("TextBox3"))).Text);
            UpdateData(name, age, id);
            this.DataList1.EditItemIndex = -1;
            Bind();
        }

        public void UpdateData(string name, int age, int id)
        {
            string sql = "update TestDB.dbo.Student set name='"+name+"',age="+age+" where id="+id+"";
            using (SqlConnection conn = new SqlConnection("Server=XATUSLX-GBH;DataBase=TestDB;user=sa;pwd=sa"))
            {
                conn.Open();
                SqlCommand cmd = new SqlCommand(sql,conn);
                cmd.ExecuteNonQuery();
            }
        }
    }
}

对了,你要记得在.aspx(Html)里面做些修改,比如在编辑的行上加上CommandName=Edit,修改的行上加上CommandName=Update,之类的,相信你都知道,只是提醒下你而已……
[/Quote]
谢谢了 还没有我想要的答案 其实datalist用的也不多 封装的控件只是不明白所以用的不习惯 现在在研究reapeater 的存储过程实现分页
wangjun3242 2009-10-27
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 wuyq11 的回复:]
protected void DataList1_EditCommand(object source, DataListCommandEventArgs e)
{
  DataList1.EditItemIndex = e.Item.ItemIndex;
  Bind();
}
protected void DataList1_UpdateCommand(object source, DataListCommandEventArgs e)
{
int productID = Convert.ToInt32(DataList1.DataKeys[e.Item.ItemIndex]);

TextBox txtName = (TextBox)e.Item.FindControl("txtName");

DataList1.EditItemIndex = -1;
Bind();
}
protected void DataList1_DeleteCommand(object source, DataListCommandEventArgs e)
{
int ID = Convert.ToInt32(DataList1.DataKeys[e.Item.ItemIndex]);

Bind();
}


[/Quote]
这段意思我明白 也是增删改的核心代码
我那段虽然复杂了点 还是不知问题出在哪
wangjun3242 2009-10-27
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 jxyxhz 的回复:]
string strName = ((TextBox)this.DataList1.Items[e.Item.ItemIndex].FindControl("TextBox1")).Text.ToString();

去掉前面转换

string strName = (this.DataList1.Items[e.Item.ItemIndex].FindControl("TextBox1")).Text.ToString();


[/Quote]
去掉textbox转换显然是不通的
wangjun3242 2009-10-27
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 jxyxhz 的回复:]
((TextBox)this.DataList1.Items[e.Item.ItemIndex].FindControl("TextBox1")).Text.ToString();
你把一个字符串转换为TextBox?

((TextBox)this.DataList1.Items[e.Item.ItemIndex].FindControl("TextBox1"));


---

string sql = (this.DataList1.DataKeys[e.Item.ItemIndex]).ToString().Trim();
这个输出一下这个索引是什么e.Item.ItemIndex
[/Quote]
与主键对应的索引
wuyq11 2009-10-25
  • 打赏
  • 举报
回复
protected void DataList1_EditCommand(object source, DataListCommandEventArgs e)
{
DataList1.EditItemIndex = e.Item.ItemIndex;
Bind();
}
protected void DataList1_UpdateCommand(object source, DataListCommandEventArgs e)
{
int productID = Convert.ToInt32(DataList1.DataKeys[e.Item.ItemIndex]);

TextBox txtName = (TextBox)e.Item.FindControl("txtName");

DataList1.EditItemIndex = -1;
Bind();
}
protected void DataList1_DeleteCommand(object source, DataListCommandEventArgs e)
{
int ID = Convert.ToInt32(DataList1.DataKeys[e.Item.ItemIndex]);

Bind();
}

小_虎 2009-10-25
  • 打赏
  • 举报
回复
string strName = ((TextBox)this.DataList1.Items[e.Item.ItemIndex].FindControl("TextBox1")).Text.ToString();

去掉前面转换

string strName = (this.DataList1.Items[e.Item.ItemIndex].FindControl("TextBox1")).Text.ToString();

小_虎 2009-10-25
  • 打赏
  • 举报
回复
((TextBox)this.DataList1.Items[e.Item.ItemIndex].FindControl("TextBox1")).Text.ToString();
你把一个字符串转换为TextBox?

((TextBox)this.DataList1.Items[e.Item.ItemIndex].FindControl("TextBox1"));


---

string sql = (this.DataList1.DataKeys[e.Item.ItemIndex]).ToString().Trim();
这个输出一下这个索引是什么e.Item.ItemIndex

62,074

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术交流专区
javascript云原生 企业社区
社区管理员
  • ASP.NET
  • .Net开发者社区
  • R小R
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

.NET 社区是一个围绕开源 .NET 的开放、热情、创新、包容的技术社区。社区致力于为广大 .NET 爱好者提供一个良好的知识共享、协同互助的 .NET 技术交流环境。我们尊重不同意见,支持健康理性的辩论和互动,反对歧视和攻击。

希望和大家一起共同营造一个活跃、友好的社区氛围。

试试用AI创作助手写篇文章吧