简体   繁体   English

当尝试将复选框添加到 asp.net forms 上的网格视图时出现错误?

[英]when try to add check box to grid view on asp.net forms i get error?

I work on asp.net web forms with c# I need to add checkbox column as last column on gridview我在 asp.net web forms 和 c# 上工作 我需要添加复选框列作为 gridview 的最后一列

but i don't know how to add it但我不知道如何添加

static  string con =
   "Data Source=DESKTOP-L558MLK\\AHMEDSALAHSQL;" +
   "Initial Catalog=UnionCoop;" +
   "User id=sa;" +
   "Password=321;";
        SqlConnection conn = new SqlConnection(con);
        protected void Page_Load(object sender, EventArgs e)
        {
            if (!IsPostBack)
            {
                GridViewSearch.DataSource = GetDataForSearch();
                GridViewSearch.DataBind();
            }

        }


        public DataTable GetDataForSearch()
        {
            string response = string.Empty;
            SqlCommand cmd = new SqlCommand();
            DataTable dt = new DataTable();
            try
            {
                conn.Open();
                cmd.Connection = conn;
                cmd.CommandText = "select top 10 datelogged AS EntredDatetime, Doc_type AS OrderType, Printer_name, BranchID AS BranchCode, id from Print_Report";
                cmd.CommandType = CommandType.Text;
                cmd.CommandTimeout = 50000;
                SqlDataAdapter sda = new SqlDataAdapter(cmd);
                sda.Fill(dt);
            }
            catch (Exception ex)
            {
                response = ex.Message;
            }
            finally
            {
                cmd.Dispose();
                conn.Close();
            }
            return dt;

        }

on aspx page
 <asp:GridView ID="GridViewSearch" runat="server">
        </asp:GridView>
  GridViewSearch.DataSource = GetDataForSearch();
                DataGridViewCheckBoxColumn checkColumn = new DataGridViewCheckBoxColumn();
                checkColumn.Name = "X";
                checkColumn.HeaderText = "X";
                checkColumn.Width = 50;
                checkColumn.ReadOnly = false;
                checkColumn.FillWeight = 10; //if the datagridview is resized (on form resize) the checkbox won't take up too much; value is relative to the other columns' fill values
                GridViewSearch.Columns.Add(checkColumn);
                GridViewSearch.DataBind();

I get error on line below我在下面的行中收到错误

GridViewSearch.Columns.Add(checkColumn);

argument 1 can't convert from system.windows.forms.datagridviewcheckbox to system.web.ui.webcontrol.databoundfield参数 1 无法从 system.windows.forms.datagridviewcheckbox 转换为 system.web.ui.webcontrol.databoundfield

so how to solve this issue please?那么如何解决这个问题呢?

Seems to me, that if you want say a button, or check box, or dropdown?在我看来,如果您想说一个按钮、复选框或下拉菜单?

why not just add it to the markup.为什么不将其添加到标记中。

So, say like this:所以,像这样说:

<div id="MyGridPick" runat="server" style="display:normal;width:40%">
    <asp:Label ID="lblSel" runat="server" Text="" Font-Size="X-Large"></asp:Label>
    <br />
    <asp:GridView ID="GridView1" runat="server" AutoGenerateColumns="False" 
        DataKeyNames="ID"  cssclass="table table-hover" OnRowDataBound="GridView1_RowDataBound" >
        <Columns>
            <asp:BoundField DataField="FirstName" HeaderText="FirstName"     />
            <asp:BoundField DataField="LastName" HeaderText="LastName"       />
            <asp:BoundField DataField="City" HeaderText="City"                />
            <asp:BoundField DataField="HotelName" HeaderText="HotelName" ItemStyle-Width="120px"     />
            <asp:BoundField DataField="Description" HeaderText="Description" />
            <asp:TemplateField HeaderText="Select" ItemStyle-HorizontalAlign="Center">
                <ItemTemplate>
                    <asp:CheckBox ID="chkSel" runat="server" />
                </ItemTemplate>
            </asp:TemplateField>
        </Columns>
    </asp:GridView>
</div>

Then my code to load is this:然后我要加载的代码是这样的:

    protected void Page_Load(object sender, EventArgs e)
    {
        if (!IsPostBack)
            LoadGrid();
    }

    void LoadGrid()
    {
        SqlCommand cmdSQL = 
            new SqlCommand("SELECT * FROM tblHotelsA ORDER BY HotelName");
        GridView1.DataSource = MyRstP(cmdSQL);
        GridView1.DataBind();
    }

Now, of course I get VERY tired of typing that connection string stuff over and over.现在,我当然厌倦了一遍又一遍地输入连接字符串。 So, I have a "genreal" routine like this:所以,我有一个像这样的“通用”例程:

    public DataTable MyRstP(SqlCommand cmdSQL)
    {
        DataTable rstData = new DataTable();
        using (SqlConnection conn = new SqlConnection(Properties.Settings.Default.TEST4))
        {
            cmdSQL.Connection = conn;
            using (cmdSQL)
            {
                conn.Open();
                rstData.Load(cmdSQL.ExecuteReader());
            }
        }
        return rstData;
    }

And the result of running above:以及上面运行的结果:

在此处输入图像描述

So, kind of hard to make the case to "add" a check box control, when you can just drop one into the gridview.因此,当您只需将一个复选框放入 gridview 时,很难“添加”一个复选框控件。

Same goes for a button, maybe we want a button to "view" or edit the above row, or some such.按钮也是如此,也许我们想要一个按钮来“查看”或编辑上面的行,或类似的东西。

So, once again, just drop in a plain jane button, say like this:所以,再一次,只需放入一个简单的简按钮,这样说:

            <asp:TemplateField HeaderText="View" ItemStyle-HorizontalAlign="Center" >
                <ItemTemplate>
                    <asp:Button ID="bView" runat="server" Text="View" CssClass="btn"
                        OnClick="bView_Click" />
                </ItemTemplate>
            </asp:TemplateField>

And now we have this:现在我们有了这个:

在此处输入图像描述

And EVEN better?甚至更好?

Well, since that button (or check box) is a plain jane standard control?那么,既然那个按钮(或复选框)是一个普通的简标准控件?

then you can add standard events, like a click event, or whatever you want.然后你可以添加标准事件,比如点击事件,或者你想要的任何东西。

Say this code for the button click (shows how to get current row).为按钮单击说出此代码(显示如何获取当前行)。

protected void bView_Click(object sender, EventArgs e)
{
    Button btn = sender as Button;
    GridViewRow gRow = btn.NamingContainer as GridViewRow;
    int PKID = (int)GridView1.DataKeys[gRow.RowIndex]["ID"];

    SqlCommand cmdSQL = 
        new SqlCommand("SELECT * FROM tblHotelsA WHERE ID = @ID");
    cmdSQL.Parameters.Add("@ID", SqlDbType.Int).Value = PKID;

    DataTable dtHotel = MyRstP(cmdSQL);
    General.FLoader(MyEditArea, dtHotel.Rows[0]);

    MyGridPick.Style.Add("display", "none");        // hide grid
    MyEditArea.Style.Add("display", "normal");      // show edit div area

}

And we now get/see this:我们现在得到/看到这个:

在此处输入图像描述

Edit: Process each checked/selected row.编辑:处理每个选中/选定的行。

this:这:

protected void cmdSelProcess_Click(object sender, EventArgs e)
{
    // process all rows in GV with check box

    String sPK = "";
    List<int> MySelected = new List<int>();
    foreach (GridViewRow gRow in GridView1.Rows)
    {
        CheckBox chkSel = (CheckBox)gRow.FindControl("chkSel");
        if (chkSel.Checked)
        {
            int PK = (int)GridView1.DataKeys[gRow.RowIndex]["ID"];
            // add pk value of row to our list
            MySelected.Add(PK);
            // Or we could process data based on current gRow
            if (sPK != "")
                sPK += ",";

            sPK += PK.ToString();
            Debug.Print(PK.ToString());
        }

    }
    // at this point, we have a nice list of selected in MySelected
    // or, maybe process as a data table

    SqlCommand cmdSQL =
        new SqlCommand($"SELECT * FROM tblHotelsA where ID IN({sPK})");

    DataTable rstSelected = MyRstP(cmdSQL);
    // 
    foreach (DataRow dr in rstSelected.Rows)
    {
        // do whatever
    }

}

Datagridviewcheckboxcolumn is a Windows formx object. You are working in web forms. Please see the link below for information on the webforms check box field Datagridviewcheckboxcolumn 是一个 Windows formx object。你在 web forms 工作。有关webforms 复选框字段的信息,请参阅下面的链接

    CheckBoxField checkColumn = new CheckBoxField();

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

相关问题 当我尝试进行路由时,我在ASP.NET Web窗体中收到解析错误 - When I try to do routing I get a parse error in ASP.NET Web Forms Asp.net网格视图复选框到文本框 - Asp.net Grid View Check boxes to Text box 使用复选框asp.net从网格视图行显示选定的值 - show selected value from grid view row using check box asp.net 当我尝试通过 controller 将 model 传递给视图时,我在 ASP.NET 框架中收到 System.ArgumentException - I get a System.ArgumentException in ASP.NET Framework when I try to pass a model to the view through a controller 当我尝试将数据从 db 提取到 ASP.NET MVC 和 C# 中的 excel 文件中时,出现匿名类型错误 - I get an anonymous type error when I try to extract data from db into excel file in ASP.NET MVC & C# 如何使用asp.net在网格视图中添加动态分页 - How to add dynamic paging in grid view using asp.net 使用asp.net中的数据列表选中复选框时如何获取列数据 - how to get column data when check box is checked using data list in asp.net 如何在网格视图列内添加复选框? - How can I add check box inside grid view columns? 网格视图当我在asp.net的网格视图中绑定数据时如何隐藏一些特殊类型数据的细节? - grid view how to hide detail of some special type of data when i bind data in grid view in asp.net? 更新网格视图值asp.net时出错 - error on updating grid view values asp.net
 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM