有多个结果的datalist,带有我希望sql插入的文本框和按钮,怎么样?

时间:2011-01-19 23:05:35

标签: c# asp.net visual-studio

我在c#ASP.NET中,我对这一切都不熟悉。试图教自己,但我挂了一些我认为应该简单的东西。我在这里找不到搜索的答案因为我想我不知道用什么方法来描述我正在寻找的东西。所以我最后采取了欺骗你们的答案。

请非常基本,我很新但很渴望。

我有一个数据列表从数据库(MSSQL)返回X个结果 - 每个结果都附带一些信息,然后是2个文本框和一个按钮。我希望他们能够在每个框中输入一些信息,单击一个按钮,然后将其插回到我的SQL数据库中。

我希望每个文本框中的文本结果以及id(从datalist的结果返回的sql值)与它一起使用(以便我的插入知道这是来自哪个结果)

所以我的页面看起来像

text 1 - TEXTBOX - TEXTBOX - BUTTON 文本2 - 等等

如果该家伙填写了文本2的2个文本框并单击了text2的按钮,我将(textbox1.text,textbox2.text,“text 2”)插入到我的数据库中

这就是我目前为止点击后面的代码

SqlDataSource commentinsert = new SqlDataSource();
    commentinsert.ConnectionString = ConfigurationManager.ConnectionStrings["ConnectionString"].ToString();
    commentinsert.InsertCommandType = SqlDataSourceCommandType.Text;
    commentinsert.InsertCommand = "INSERT INTO ocomments (cuser, date, ip, blogid, text) VALUES (@cuser, @date, @ip, @blogid, @text)";
    commentinsert.InsertParameters.Add("cuser", ((TextBox)DataList1.Controls[0].FindControl("TextBox2")).Text);
    commentinsert.InsertParameters.Add("date", DateTime.Now.ToString());
    commentinsert.InsertParameters.Add("ip", Request.UserHostAddress.ToString());
    commentinsert.InsertParameters.Add("blogid", ((Button)DataList1.Controls[0].FindControl("Button2")).CommandArgument.ToString());
    commentinsert.InsertParameters.Add("text", ((TextBox)DataList1.Controls[0].FindControl("TextBox3")).Text);
    commentinsert.Insert();

button2中的commandargument是原始datalist行中返回的博客条目的ID。我在这里遇到的问题是,这只适用于第一个返回的结果而不适用于其他结果。我知道这是由于我在控件列表中使用[0],但我不知道如何解决这个问题。 [clientid]没有帮助。

提前感谢任何帮助人员。

编辑:添加一些我在用户建议后尝试的代码,我认为这是他要我做的但是我收到错误:对象引用没有设置为对象的实例。

protected void DataList1_ItemCommand(object source, DataListCommandEventArgs e)
{
    Button Button2b = (Button)e.Item.FindControl("Button2");
    TextBox TextBox2b = (TextBox)e.Item.FindControl("TextBox2");
    TextBox TextBox3b = (TextBox)e.Item.FindControl("TextBox3");

    SqlDataSource commentinsert = new SqlDataSource();
    commentinsert.ConnectionString = ConfigurationManager.ConnectionStrings["ConnectionString"].ToString();
    commentinsert.InsertCommandType = SqlDataSourceCommandType.Text;
    commentinsert.InsertCommand = "INSERT INTO ocomments (cuser, date, ip, blogid, text) VALUES (@cuser, @date, @ip, @blogid, @text)";
    commentinsert.InsertParameters.Add("cuser", TextBox2b.Text);
    commentinsert.InsertParameters.Add("date", DateTime.Now.ToString());
    commentinsert.InsertParameters.Add("ip", Request.UserHostAddress.ToString());
    commentinsert.InsertParameters.Add("blogid", Button2b.CommandArgument.ToString());
    commentinsert.InsertParameters.Add("text", TextBox3b.Text);
    commentinsert.Insert();
}

2 个答案:

答案 0 :(得分:0)

您确实希望使用DataList的ItemCommand事件来执行更新。将DataKeys属性设置为DataRow的ID字段,在ItemCommand事件中获取DataKey值,以便知道要更新的行。

要获取对服务器控件数据的引用,请使用e.Item.ItemIndex [e.SelectedIndex]获取对正确行的引用。当然,在ItemCommand事件中。

答案 1 :(得分:0)