如何将C#excel导出中的复选框替换为1和0?

如何将C#excel导出中的复选框替换为1和0?,c#,asp.net,sql-server,excel,checkbox,C#,Asp.net,Sql Server,Excel,Checkbox,在一个C#应用程序中,我动态创建了一个GridView,并将其导出到Excel。我遇到的问题是,由于三个字段是SQL中的位列,所以它们作为复选框而不是1和0导出。我在谷歌上搜索了一些类似的问题,找到了这个解决方案。但是,这将不起作用,因为右键或左键单击对象只会选中或取消选中该框 我还试图找到有关如何从C#导出位字段为1和0的信息,但没有找到任何信息。以下是我的导出脚本: StringWriter writer = new StringWriter(); HtmlTextWriter htmlWr

在一个C#应用程序中,我动态创建了一个
GridView
,并将其导出到Excel。我遇到的问题是,由于三个字段是SQL中的位列,所以它们作为复选框而不是1和0导出。我在谷歌上搜索了一些类似的问题,找到了这个解决方案。但是,这将不起作用,因为右键或左键单击对象只会选中或取消选中该框

我还试图找到有关如何从C#导出位字段为1和0的信息,但没有找到任何信息。以下是我的导出脚本:

StringWriter writer = new StringWriter();
HtmlTextWriter htmlWriter = new HtmlTextWriter(writer);
GridView gridView = new GridView();
gridView.DataSource = sdsResults;
gridView.AutoGenerateColumns = true;
gridView.DataBind();
gridView.HeaderRow.Style.Add("background-color", "#003c74");
gridView.HeaderRow.Style.Add("color", "#ffffff");
for (int i = 0; i < gridView.Rows.Count; i++)
        {
            GridViewRow row = gridView.Rows[i];

            //Change Color back to white
            row.BackColor = System.Drawing.Color.White;

            //Apply text style to each Row
            row.Attributes.Add("class", "textmode");

            //Apply style to Individual Cells of Alternating Row
            if (i % 2 != 0)
            {
                row.BackColor = System.Drawing.Color.AliceBlue;
            }

            foreach(TableCell cell in row.Cells)
            {
                if(cell.HasControls() == true)
                {
                  if(cell.Controls[0].GetType().ToString() == "System.Web.Ui.WebControls.CheckBox")
                   {
                       CheckBox chk = (CheckBox)cell.Controls[0];
                        if(chk.Checked)
                        {
                           cell.Text = "1";
                        }
                        else
                        {
                            cell.Text = "0";
                        }
                   }
                }
            }
        }
gridView.RenderControl(htmlWriter);
htmlWriter.Close();

Response.Clear();
Response.AddHeader("content-disposition", "attachment;filename=myfile.xls");
Response.Charset = "";
Response.Write(writer.ToString());
Response.End();
Response.End();
StringWriter编写器=新建StringWriter();
HtmlTextWriter htmlWriter=新的HtmlTextWriter(编写器);
GridView GridView=新的GridView();
gridView.DataSource=sdsResults;
gridView.AutoGenerateColumns=true;
gridView.DataBind();
gridView.HeaderRow.Style.Add(“背景色”,“003c74”);
gridView.HeaderRow.Style.Add(“color”和“#ffffff”);
对于(int i=0;i
如果使用SQL查询构建数据源,则将位列强制转换为int或varchar。如果无法做到这一点,请尝试在分配数据源之前使用所需的数据类型定义GridView列

在for循环中,可以执行以下操作:

foreach(TableCell cell in row.Cells)
 {
   if(cell.HasControls() == true)
    {
      if(cell.Controls[0].GetType().ToString() == "System.Web.UI.WebControls.CheckBox")
       {
           CheckBox chk = (CheckBox)cell.Controls[0];
           if(chk.Checked)
            {
               cell.Text = "1";
            }
           else{
                cell.Text = "0";
               }
       }
    }
 }

受保护的子BTNxlExport_Click(发件人作为对象,e作为事件参数)处理BTNxlExport。单击

    Response.Clear()
    Response.Buffer = True
    Response.AddHeader("content-disposition", "attachment;filename=GridViewExport.xls")
    Response.Charset = ""
    Response.ContentType = "application/vnd.ms-excel"
    Dim sw As New StringWriter()
    Dim hw As New HtmlTextWriter(sw)
    gvStandard.AllowPaging = False
    gvStandard.DataBind()
    For i As Integer = 0 To gvStandard.Rows.Count - 1
        Dim row As GridViewRow = gvStandard.Rows(i)
        For Each cell As TableCell In row.Cells
            If cell.HasControls() = True Then
                If cell.Controls(0).[GetType]().ToString() = "System.Web.UI.WebControls.CheckBox" Then
                    Dim chk As CheckBox = DirectCast(cell.Controls(0), CheckBox)
                    If chk.Checked Then
                        cell.Text = "True"
                    Else
                        cell.Text = "False"
                    End If
                End If
            End If
        Next
    Next
    gvStandard.HeaderRow.Style.Add("background-color", "#FFFFFF")
    gvStandard.RenderControl(hw)
    Response.Output.Write(sw)
    Response.Flush()
    Response.End()
End Sub
protectedvoid btnxlexport\u单击(对象发送方,事件参数e)
{
Response.Clear();
Response.Buffer=true;
AddHeader(“内容处置”、“附件;文件名=GridViewExport.xls”);
响应。Charset=“”;
Response.ContentType=“application/vnd.ms excel”;
StringWriter sw=新的StringWriter();
HtmlTextWriter hw=新的HtmlTextWriter(sw);
gvStandard.AllowPaging=假;
gvStandard.DataBind();

对于(int i=0;我的意思是:如果复选框被选中,那么它应该作为1导出到sql,否则为0?您的问题有点复杂unclear@Koen是的。我为不清楚而道歉。我尽力解释。
if(chk.Checked==true)
真的吗?最好检查
if((chk.Checked==true)==true)
当然…@Corak XD,我笑得很厉害。但你是对的,这是不必要的代码。但说真的,如果你想知道,如果变量(即控件)是某种类型或子类型(或“可转换为”),你可以使用。比如:
如果(cell.Controls[0]是System.Web.Ui.WebControls.CheckBox)
无需通过
ToString()
走慢弯路。如果
你可以通过使用.Like:
cell.Text=((复选框)cell.Controls[0])来缩短最里面的
。选中?:“0”;
^@Corak sh*t这要短得多,不管怎样,我是一个刚开始的程序员,只会坚持我的新手).First basics,而不是更难的东西。您还可以将前两个
ifs
与.Btw.
if(cell.HasControls()==true)
再次^。例如:
if(cell.HasControls()&&cell.Controls[0]是System.Web.UI.WebControls.CheckBox)
。访问
控件[0]时不会出现错误
因为将首先检查
cell.HasControls()
,如果返回
false
,则
和&
之后的所有内容都不会被计算。这看起来不像问题中的C#,这是不幸的。抱歉,这是vb代码…也给出了C#代码。谢谢
protected void btnXlsExport_Click(object sender, EventArgs e)
{
    Response.Clear();
    Response.Buffer = true;
    Response.AddHeader("content-disposition", "attachment;filename=GridViewExport.xls");
    Response.Charset = "";
    Response.ContentType = "application/vnd.ms-excel";
    StringWriter sw = new StringWriter();
    HtmlTextWriter hw = new HtmlTextWriter(sw);
    gvStandard.AllowPaging = false;
    gvStandard.DataBind();
    for (int i = 0; i <= gvStandard.Rows.Count - 1; i++) {
        GridViewRow row = gvStandard.Rows(i);
        foreach (TableCell cell in row.Cells) {
            if (cell.HasControls() == true) {
                if (cell.Controls(0).GetType().ToString() == "System.Web.UI.WebControls.CheckBox") {
                    CheckBox chk = (CheckBox)cell.Controls(0);
                    if (chk.Checked) {
                        cell.Text = "True";
                    } else {
                        cell.Text = "False";
                    }
                }
            }
        }
    }
    gvStandard.HeaderRow.Style.Add("background-color", "#FFFFFF");
    gvStandard.RenderControl(hw);
    Response.Output.Write(sw);
    Response.Flush();
    Response.End();
}