C# 数据集-类模型-如何从数据集获取布尔值

C# 数据集-类模型-如何从数据集获取布尔值,c#,asp.net,C#,Asp.net,我不熟悉C#和ASP.net。我是一名ColdFusion程序员,但我正在学习ASP.net 我会给出细节,然后问我的问题 我已经能够从服务层类文件(或业务逻辑层)后面的代码中调用它,然后在其中调用数据访问层类文件。我一直在从数据访问层发回一个数据集,然后在代码后面将代码移动到一个表中,这样我就可以逐行读取它 当我在编辑屏幕上找到这篇文章时,我正在寻找一种获取布尔值的方法,将复选框设置为选中 我看到有人提到他们应该 或者-使用一个类模型,而不是一个听起来不错的数据表,如果它是我认为它是 在CR

我不熟悉C#和ASP.net。我是一名ColdFusion程序员,但我正在学习ASP.net

我会给出细节,然后问我的问题

我已经能够从服务层类文件(或业务逻辑层)后面的代码中调用它,然后在其中调用数据访问层类文件。我一直在从数据访问层发回一个数据集,然后在代码后面将代码移动到一个表中,这样我就可以逐行读取它

当我在编辑屏幕上找到这篇文章时,我正在寻找一种获取布尔值的方法,将复选框设置为选中

我看到有人提到他们应该

或者-使用一个类模型,而不是一个听起来不错的数据表,如果它是我认为它是

在CRUD屏幕上使用类文件提取数据的最佳方式是什么?数据应该采用什么格式

我习惯于使用查询集返回ColdFusion中的数据,然后我们可以循环使用它。我们可以将查询转换为结构数组或对象数组、XML或JSon,但在理解如何在取回数据集时从数据集中取出数据时,我仍然遇到一些问题。我现在得到的字符串数据很好,但可能有一个非常简单的例子,可能只有一页

我想知道现在如何获取布尔值是我当前的问题

谢谢你的帮助, 内森

另外,如果有更好更专业的方法,请告诉我。我想继续使用(表示/代码隐藏/服务/数据访问)类型的层

Protected void Page_Load(Object sender, EventArgs e)
{
if(!IsPostBack)
{

DataTable dt = new DataTable();
DataRow dr;

PageService myPage = new PageService();
DataSet ds = myPage.getPages();

int rowCount = ds.Tables[0].Rows.Count;
ds.Columns.Add(new DataColumn("PageID", typeof(Int32)));
ds.Columns.Add(new DataColumn("Name", typeof(String)));
ds.Columns.Add(new DataColumn("PageHTMLContent", typeof(String)));
ds.Columns.Add(new DataColumn("NavigationText", typeof(String)));
ds.Columns.Add(new DataColumn("TopMenu", typeof(Boolean)));
ds.Columns.Add(new DataColumn("SubMenu", typeof(Boolean)));
ds.Columns.Add(new DataColumn("DisplayOrder", typeof(Int32)));
ds.Columns.Add(new DataColumn("Active", typeof(Boolean)));

for (int i = 0; i < rowCount; i++)
{
  dr = dt.NewRow();
  dr[0] = i;
  dr[1] = i.ToString;
  dr[2] = i.ToString;
  dr[3] = i.ToString;
  dr[4] = i;            // Not sure what to do here for the Boolean Value
  dr[5] = i;  // Not sure what to do here for the Boolean Value
  dr[6] = i;
  dr[7] = i;  // Not sure what to do here for the Boolean Value
}

ds.Tables.Add(dt);
foreach (DataRow dataRow in ds.Tables[0].Rows)
{
  PageIDHiddenField.Value = dataRow["PageID"];
  NameTextBox.Text = dataRow["Name"].ToString();
  PageHTMLContentTextBox.Text = dataRow["PageHTMLContent"];
  NavigationTextTextBox.Text = dataRow["NavigationText"];
  TopMenuCheckBox.Checked = dataRow["TopMenu"];           // Not sure what to do here for the Boolean Value
  SubMenuCheckBox.Checked = dataRow["SubMenu"];           // Not sure what to do here for the Boolean Value
  DisplayOrder.Text = dataRow["DisplayOrder"].ToString();
  ActiveCheckBox.Checked = dataRow["Active"];             // Not sure what to do here for the Boolean Value
}
}
}
受保护的无效页面加载(对象发送方,事件参数e)
{
如果(!IsPostBack)
{
DataTable dt=新的DataTable();
数据行dr;
PageService myPage=新建PageService();
数据集ds=myPage.getPages();
int rowCount=ds.Tables[0].Rows.Count;
Add(新的数据列(“PageID”,typeof(Int32));
Add(新的DataColumn(“Name”,typeof(String));
Add(新数据列(“PageHTMLContent”,typeof(String));
Add(新数据列(“NavigationText”,typeof(String));
Add(新数据列(“TopMenu”,typeof(Boolean));
添加(新数据列(“子菜单”,typeof(布尔));
Add(新的DataColumn(“DisplayOrder”,typeof(Int32));
Add(新的DataColumn(“Active”,typeof(Boolean));
对于(int i=0;i
您需要将值转换为正确的类型。由于
dataRow
的indexer属性将返回类型为
object
的对象,因此需要将其强制转换为正确的类型。因此,您需要将其强制转换为
Boolean
,如下所示:

TopMenuCheckBox.Checked = (bool)dataRow["TopMenu"];
要执行一个循环来迭代
数据集中的行
,您可以执行以下操作:

DataSet ds = myPage.getPages();

foreach (DataRow row in ds.Tables[0].Rows)
{
    PageIDHiddenField.Value = row["PageID"];
    NameTextBox.Text = (string)row["Name"];
    ...
    TopMenuCheckBox.Checked = (bool)row["TopMenu"];
}

您可以使用
DataRow
的indexer属性来获取特定列。

我只希望迭代原始数据集。您能给我一个示例吗?当然,我会编辑我的响应。问题:数据集是否总是返回一行?似乎您正在返回每页配置?此配置与编辑页相同,因此如果有更好的操作,我可以从类中返回。我考虑过一个读者,创建了一个结构,并传回了一个结构。最好的选择是什么?使用TopMenuCheckBox.Checked=(bool)行[“TopMenu”];始终选中复选框。出什么问题了?我在匆忙修复问题时出错了,因为我将TopMenu保留在了行中的所有复选框上,所以它可以正常工作。谢谢,如果您对我应该做的事情有任何其他建议,让我的代码更专业,请做。我正在努力把事情做好,而不是把事情做好。当我把事情做好的时候,我会担心事情是否会完成。再次感谢。