【问题标题】:CheckBox in GridView failingGridView 中的复选框失败
【发布时间】:2013-11-23 04:28:52
【问题描述】:

我已经阅读了大约 50 个网站和 stackoverflow 问题,这些问题建议按照我在下面的代码中的内容进行操作。我在这方面经历了很多变化,我似乎根本无法让它做任何事情。

我一直在看 SQL Profiler,但根本没有发送任何内容。 我没有收到任何错误。

我想要的只是一个带有复选框的列表,我可以单击以将单个设置从 0 更改为 1。我确定是我,但我错过了它,而且我为此花了很长时间很尴尬。感谢您的任何意见。

<asp:GridView ID="GridView1" runat="server" AutoGenerateColumns="False" 
        DataSourceID="SqlDataSource1" DataKeyNames="npi" 
    onselectedindexchanged="GridView1_SelectedIndexChanged">
        <Columns>
            <asp:BoundField DataField="provcode" HeaderText="provcode" 
                SortExpression="provcode" />
            <asp:BoundField DataField="npi" HeaderText="npi" SortExpression="npi" />
            <asp:BoundField DataField="firstname" HeaderText="firstname" 
                SortExpression="firstname" />
            <asp:BoundField DataField="lastname" HeaderText="lastname" 
                SortExpression="lastname" />
            <asp:TemplateField HeaderText="Submit Y/N">
                <ItemTemplate>
                    <asp:CheckBox ID="submitChk" runat="server" Enabled="true" AutoPostBack="True" OnCheckChanged="submit_CheckedChanged"
                       Checked='<%# Bind("submit") %>'/>
                </ItemTemplate>
                <ItemStyle HorizontalAlign="Center" />
            </asp:TemplateField>
        </Columns>
    </asp:GridView>
<br />

<p>
    <asp:SqlDataSource ID="SqlDataSource1" runat="server" 
        ConnectionString="<%$ ConnectionStrings:DS_SSRS_ReportsConnectionString1 %>" 
        SelectCommand="SELECT [provcode], [npi], [firstname], [lastname], [submit] 
                       FROM [DRPprovders]
                       ORDER BY lastname, firstname"
        onselecting="SqlDataSource1_Selecting" 
        >
    </asp:SqlDataSource>
</p>

代码隐藏:

using System;
using System.Data;
using System.Data.SqlClient;
using System.Collections.Generic;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.Configuration;

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

protected void GridView1_SelectedIndexChanged(object sender, EventArgs e)
{

}
protected void SqlDataSource1_Selecting(object sender, SqlDataSourceSelectingEventArgs e)
{

}

protected void submit_CheckedChanged(object sender, EventArgs e)
{
    CheckBox submitChk = (CheckBox)sender;
    GridViewRow row = (GridViewRow)submitChk.NamingContainer;
    //int ID = (int)GridView1.DataKeys[row.DataItemIndex].Value;
    String npi = (String)GridView1.DataKeys[row.DataItemIndex].Value;

}

}

【问题讨论】:

  • 你的代码什么也不做!解释更多..
  • 你认为NamingContainer为什么会持有一行数据?
  • @N4TKD,我不能说。我只是在关注几个我发现其他人正在做我需要做的事情的例子。我从未亲自使用过 NamingContainer,但这是其他人的建议,所以我试了一下。
  • @mehdi,没什么好解释的。这是一个只有一个网格的页面,里面有一张小桌子。带有复选框(提交)的列设置为自动回发并在代码隐藏中使用 submit_CheckedChanged 事件。该事件是使用其他人的示例编写的。
  • @R_Scott 最好的步骤是调试它 遍历代码看看我认为 NamingContainer 持有的控件 id 是什么。

标签: c# asp.net gridview checkbox


【解决方案1】:

您只需要连接到数据库并在 CheckedChanged 方法中“手动”执行更新。

这样的事情应该可以工作:

protected void submit_CheckedChanged(object sender, EventArgs e)
{
    CheckBox submitChk = (CheckBox)sender;
    GridViewRow row = (GridViewRow)submitChk.NamingContainer;
    String npi = (String)GridView1.DataKeys[row.DataItemIndex].Value;

    SqlConnection conn = new SqlConnection("your connection string here");
    string updateQuery = "UPDATE DRPprovders SET submit = @submit WHERE npi = @npi";
    SqlCommand cmd = new SqlCommand(updateQuery, conn);

    // If it's checked, pass 1, else pass 0
    cmd.Parameters.AddWithValue("@submit", submitChk.Checked ? 1 : 0);
    cmd.Parameters.AddWithValue("@npi", npi);

    conn.Open();
    cmd.ExecuteNonQuery();
    conn.Close();
}

您可能只是能够传递 submitChk.Checked 的布尔值(而不是像我那样转换为 1 和 0),我现在不记得了(我只是在脑海中输入了这个,所以它未经测试)。

【讨论】:

  • 这实际上可能需要submitChk.Checked ? "1" : "0" 伙计,我对这些东西生疏了。我现在太习惯使用 ORM 了。
  • 在我发现我的愚蠢错字后,我使用了您的解决方案,并且做到了。正是我想要的。感谢您的时间。非常感谢。
  • 太好了,@R_Scott!我很高兴能帮上忙。
猜你喜欢
  • 1970-01-01
  • 2015-01-26
  • 1970-01-01
  • 1970-01-01
  • 2010-12-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多