我有一个从SQL表填充的gridview,它显示两列,一列来自整数数据列,另一列来自nvarchar。 Gridview还有一个复选框列
gridview正确填充,并且在选择了一部分行后(通过复选框列),我想将所选行插入另一个SQL表中。在填充SQL语句的变量时,我得到"不能从字符串转换为int"从int开始填充的值的错误。
我已尝试为此语句编写转换和解析但仍然收到错误:
cmd.Parameters.AddWithValue("@PracticeArea", int.Parse(row.Cells["Id"].Value));
cmd.Parameters.AddWithValue("@PracticeArea", Convert.ToInt32(row.Cells["Id"].Value));
cmd.Parameters.AddWithValue("@PracticeArea", Convert.ToInt32(row.Cells["Id"].Text));
所有仍显示[" Id"]值的错误。
有什么想法吗?
正在填充到gridview的数据示例是:
PracticeID PracticeName
1 General Surgical Pathology
2 General Pathology/Basic Science
4 Cardiovascular
6 Cytopathology-GYN
7 Cytopathology-nonGYN
完整按钮命令是:
protected void Bulk_Insert(object sender, EventArgs e)
{
foreach (GridViewRow row in GridView1.Rows)
{
if ((row.FindControl("CheckBox1") as CheckBox).Checked)
{
string connectionString = WebConfigurationManager.ConnectionStrings["CS1"].ConnectionString;
SqlConnection con = new SqlConnection(connectionString);
{
using (SqlCommand cmd = new SqlCommand("INSERT INTO ReviewerPractice VALUES(@Reviewer, @PracticeArea)", con))
{
cmd.Parameters.AddWithValue("@Reviewer", ReviewerName.Text);
cmd.Parameters.AddWithValue("@PracticeArea", Convert.ToInt32(row.Cells["Id"].Value));
con.Open();
cmd.ExecuteNonQuery();
con.Close();
}
}
}
}
}
完整的Gridview控件是:
<asp:GridView ID="GridView1" runat="server" AutoGenerateColumns="false">
<Columns>
<asp:TemplateField>
<ItemTemplate>
<asp:CheckBox ID="CheckBox1" runat="server" />
</ItemTemplate>
</asp:TemplateField>
<asp:BoundField DataField="Id" HeaderText="Id" ItemStyle-Width="30" />
<asp:BoundField DataField="PracticeName" HeaderText="PracticeName" ItemStyle-Width="150" />
</Columns>
</asp:GridView>
<br />
<asp:Button ID="Button1" Text="Add Practice Areas" OnClick="Bulk_Insert" runat="server" />
希望这回答(一些?)迄今为止所有评论的问题。
答案 0 :(得分:2)
问题是row.Cells[]
是一个数组,所以你需要像这样使用它:
row.Cells[3].Text
最好像这样使用sql的参数:
cmd.Parameters.Add("@PracticeArea", SqlDbType.Int).Value = Convert.ToInt32(row.Cells[index].Text;