我正在尝试在检查行时从网格视图中获取列值,并将这些值插入到其他表中, 当选中网格视图中的复选框时,这是我的c#代码
protected void chkfun_CheckedChanged(object sender, EventArgs e)
{
CheckBox chkstatus = (CheckBox)sender;
GridViewRow row = (GridViewRow)chkstatus.NamingContainer;
}
protected void hidebutton_Click(object sender, EventArgs e)
{
OleDbConnection acc = dc_object.a_object.Connect("CARLI_funds_FY16");
OleDbCommand commd = new OleDbCommand();
commd.Connection = acc;
CheckBox x1;
HiddenField x2;
for (int i = 0; i < GridView1.Rows.Count; i++)
{
x1 = GridView1.Rows[i].FindControl("chkfun") as CheckBox;
if (x1.Checked)
{
x2 = GridView1.Rows[i].FindControl("hdnfld") as HiddenField;
var fund_code = (GridView1.Rows[i].FindControl("lblfundcode") as Label).Text;
var fund_name = (GridView1.Rows[i].FindControl("lblfundname") as Label).Text;
commd.CommandText = "insert into funds_hidden values(fund_code,fund_name)";
commd.ExecuteNonQuery();
}
}
acc.Close();
Response.Redirect("allfunds.aspx");
}
,这是我的aspx代码
<asp:GridView ID="GridView1" runat="server" DataKeyNames="ID,FUND_CODE,FUND_NAME" AllowSorting="True" CellPadding="4" DataSourceID="SqlDataSource1" ForeColor="#333333" GridLines="None" AutoGenerateColumns="False">
<AlternatingRowStyle BackColor="White" />
<Columns>
<asp:TemplateField>
<HeaderTemplate>
<asp:CheckBox ID="chkheader" runat="server" OnCheckedChanged="chkheader_CheckedChanged" AutoPostBack="True" />
</HeaderTemplate>
<ItemTemplate>
<asp:CheckBox ID="chkfun" runat="server" OnCheckedChanged="chkfun_CheckedChanged" AutoPostBack="True" />
<asp:HiddenField ID="hdnfld" runat="server" value='<%# Eval("ID") %>'/>
</ItemTemplate>
</asp:TemplateField>
<asp:TemplateField HeaderText="FUND_CODE">
<ItemTemplate>
<asp:Label ID="lblfundcode" runat="server" Text='<%# Eval("FUND_CODE") %>'></asp:Label>
</ItemTemplate>
</asp:TemplateField>
<asp:TemplateField HeaderText="FUND_NAME">
<ItemTemplate>`enter code here`
<asp:Label ID="lblfundname" runat="server" Text='<%# Eval("FUND_NAME") %>'></asp:Label>
</ItemTemplate>
</asp:TemplateField>
</Columns>
</asp:GridView>
<asp:LinkButton ID="hidebutton" runat="server" OnClick="hidebutton_Click" Text="hide" />
<asp:SqlDataSource ID="SqlDataSource1" runat="server" SortParameterName="" ConnectionString="<%$ ConnectionStrings:ConnectionString %>" ProviderName="<%$ ConnectionStrings:ConnectionString.ProviderName %>" SelectCommand="SELECT ID,NORMAL_FUND_NAME AS FUND_NAME, NORMAL_FUND_CODE AS FUND_CODE FROM funds_sample1 WHERE (LEDGER_ID = 43) AND (PARENT_FUND = 1124 OR PARENT_FUND = 984 OR PARENT_FUND = 370 OR PARENT_FUND = 363)"></asp:SqlDataSource>
</form>
我只是初学者请指导我,如果我的代码有任何错误,我该怎么做才能清除此错误,提前谢谢
答案 0 :(得分:1)
您应该为您的值指定参数:
commd.CommandText = "insert into funds_hidden values(?, ?)";
commd.Parameters.Add("code", OleDbType.VarChar).Value = fund_code;
commd.Parameters.Add("name", OleDbType.VarChar).Value = fund_name;
我还建议:
using
语句答案 1 :(得分:0)
我已将insert语句更改为以下方式以使其正常工作,感谢您现在正在帮助其工作
for (int i = 0; i < GridView1.Rows.Count; i++)
{
x1 = GridView1.Rows[i].FindControl("chkfun") as CheckBox;
if (x1.Checked)
{
x2 = GridView1.Rows[i].FindControl("hdnfld") as HiddenField;
var fund_code = (GridView1.Rows[i].FindControl("lblfundcode") as Label).Text;
var fund_name = (GridView1.Rows[i].FindControl("lblfundname") as Label).Text;
string insertstatement = "insert into funds_hidden(fund_code,fund_name)"+ " values (?,?)" ;
OleDbCommand insertcommand = new OleDbCommand(insertstatement, acc);
insertcommand.Parameters.Add("fund_code", OleDbType.Char).Value = fund_code;
insertcommand.Parameters.Add("fund_name", OleDbType.Char).Value = fund_name;
insertcommand.ExecuteNonQuery();