C#datatable的问题,datatable1(dt1)主表datatable2(dt2)次表

C#datatable的问题,datatable1(dt1)主表datatable2(dt2)次表,第1张

本质上就是取 dt1、dt2 的非重复项(非交集),方法有很多。

1、最笨的一种是循环遍历,两层 for 循环。

2、如果存在唯一性 Key 的话(可以理解为主键),那么把 dt2 中的这些 Key 取出,从 dt1(或其副本)中删除,剩下的自然就是非重复项。

3、先对两表中的某一字段进行排序,然后用二分法做检索,相当于对第一种方法做了搜索优化。

4、如果是 NET 35 或以上,可以利用 Linq:

var dt3 = from r in dt1AsEnumerable()

    where !(

        from rr in dt2AsEnumerable()

        select rrField<int>("Id")

    )Contains(rField<int>("Id"))

    select r; // 假设存在唯一性 Key:Id

DataRow dr = dtRowsFind(txtNoText);

意思是说从表dt取出,含有txtNoText的行。赋值给dr;

DataTable dt = dsTables["cs"];

其中的ds是一个数据集,包含多个表,这句的意思是,从数据集ds中获取表名是cs的表,赋值给dt;

sdaFillSchema(dt, SchemaTypeMapped);

下面这句是把dt的数据填充给适配器sda。填充模式SchemaTypeMapped

这是遍历一行数据 foreach (object obj in tableRows[0]ItemArray)

{

}

DataRowcollection 是一个集合,tableRows 就是DataRowcollection 对象。。。

foreach (Datarow dr in tableRows)

{

}

获取GridView里某行某列的值示例

//GridView设置

<asp:GridView ID="GridView1" runat="server" AllowPaging="True" AutoGenerateColumns="False"

CellPadding="4" Font-Size="9pt" ForeColor="#333333" GridLines="None"

Width="500px" OnRowDeleting="GridView1_RowDeleting"

OnPageIndexChanging="GridView1_PageIndexChanging"

OnRowDataBound="GridView1_RowDataBound" PageSize="6" Height="1px">

<FooterStyle BackColor="#1C5E55" Font-Bold="True" ForeColor="White" />

<RowStyle BackColor="#E3EAEB" />

<Columns>//codegonet/tags/11/1/

<asp:BoundField DataField="ST_n_id" HeaderText="文章ID" />

<asp:BoundField DataField="ST_n_title" HeaderText="文章主题" />

<asp:BoundField DataField="ST_n_hit" HeaderText="人气指数" />

<asp:BoundField DataField="ST_n_re" HeaderText="评论" />

<asp:HyperLinkField DataNavigateUrlFields="ST_n_id" DataNavigateUrlFormatString="ViewContentaspxid={0}"

HeaderText="查看信息" Text="查看信息" />

<asp:CommandField HeaderText="删除" ShowDeleteButton="True" />

<asp:TemplateField HeaderText="选择">

<ItemTemplate>

<asp:CheckBox ID="CheckBox1" runat="server" Font-Size="9pt" Width="9px" />

</ItemTemplate>

</asp:TemplateField>

</Columns>

<SelectedRowStyle BackColor="#C5BBAF" ForeColor="#333333" Font-Bold="True" />

<PagerStyle BackColor="#666666" ForeColor="White" HorizontalAlign="Center" />

<HeaderStyle BackColor="#1C5E55" Font-Bold="True" ForeColor="White" />

<EditRowStyle BackColor="#7C6F57" />

<AlternatingRowStyle BackColor="White" />

</asp:GridView>

//加载数据库数据

SqlData da = new SqlData();

private static string ID;

protected void Page_Load(object sender, EventArgs e)

{

if (!IsPostBack)

{

/判断是否登录/

ST_check_Login();

}

//定义一个查询用户信息的SQL语句

string sqlstr = "select from tb_Blog where UserName='" + Session["UserName"] + "'";

//调用公共类中的GetDataSet方法执行SQL语句,并返回DataSet类型的数据集

DataSet mydataset = daGetDataSet(sqlstr, "tb_Blog");

//创建数据表的视图

DataRowView rowview1 = mydatasetTables["tb_Blog"]DefaultView[0];

//获取注册博客的编号

ID = rowview1["BlogID"]ToString();

//调用自定义绑定方法绑定数据

ST_Article_Bind();

}

//绑定数据库显示数据

public void ST_Article_Bind()

{

//根据获取的用户ID查询其所有文章

string sqlstr = "select from ST_news where BlogID='" + ID + "'";

//调用公共类中的ExceDS方法,返回一个DataSet类型的数据集,并作为GridView控件的数据源

GridView1DataSource = daExceDS(sqlstr);

//获取GridView控件中的主键字段

GridView1DataKeyNames = new string[] { "ST_n_id" };

//从数据库中绑定数据到列表控件中

GridView1DataBind();

}

//查看某行某列信息跳转ViewContentaspx

<asp:Label ID="labSubject" runat="server" Width="316px" Font-Size="9pt" ></asp:Label>//显示主题

<asp:TextBox ID="txtContent" runat="server" Font-Size="9pt" Height="257px" TextMode="MultiLine"

Width="405px"></asp:TextBox>//显示内容

//加载绑定数据库内容显示数据

protected void Page_Load(object sender, EventArgs e)

{

if (!IsPostBack)

{

try

{

string str;

string str2 = PageRequest["id"]ToString();

//此处用来实现将数据绑定到前台

SqlConnection mycon = new SqlConnection(ConfigurationManagerAppSettings["conStr"]);

myconOpen();

SqlDataAdapter myada = new SqlDataAdapter("select from ST_news where ST_n_id='" + str2 + "'", mycon);

DataSet ds = new DataSet();

myadaFill(ds, "ST_news");

//创建DataRowView对象的一个实例

DataRowView rowview = dsTables["ST_news"]DefaultView[0];

//将文章主题读取到labSubject文本框中

thislabSubjectText = rowview["ST_n_title"]ToString();

//将文章内容读取到txtContent文本框中

thistxtContentText = rowview["ST_n_content"]ToString();

myconClose();

}

catch (Exception ex)

{

ResponseWrite(exMessage);

}

}

}

GridView1Rows[eNewSelectedIndex]Cells[4]Text

处理数据行(DataRow)

Windows窗体中的数据绑定列表框和组合框很节省时间 典型的代码如下(假定已经建立了SqlDataAdapter或者其它部件获取数据)

Dim ds As New DataSet() SqlDataAdapter Fill(ds Customers ) ListBox DataSource = ds Tables( Customers ) ListBox DisplayMember = CompanyName ListBox ValueMember = CustomerID

在这种情况下 代码使用Northwind数据库的顾客记录工作 DisplayMember属性设置为你希望用户在列表框中看到的记录字段 它是customers表的CompanyName 通常ValueMember属性设置为数据表中的一个键字段 对于customer来说是CustomerID 一旦用户选择了列表框中的一行 很容易使用列表框的SelectedValue属性获得键字段

MsgBox(ListBox SelectedValue)

但是有可能需要一个与被选择项相关的整个数据行对象的引用 例如 如果被选择的行需要被删除 就不知道键了 你需要一个数据行的引用以使用Delete方法

典型的Visual Basic开发者通常这样想 我已经得到了该行的键了 我将编写一些逻辑来查找使用该键的行 这样可以实现 但是有更好的实现方法 可以使用一行代码获取与列表框中选项关联的数据行

Dim dr As DataRow = CType(ListBox SelectedItem DataRowView) Row

通常该逻辑不会凭直觉出现 即使对经验丰富的开发者 为了解释这是怎样实现的 我把上面的一行拆成几行 下面的代码与上面代码的功能相同

Dim drv As DataRowView drv = CType(ListBox SelectedItem DataRowView) Dim dr As DataRow dr = drv Row

DataRowView类是数据行的包装 它被多个Windows窗体控件使用 它使得显示与控件中的数据行相关的数据更加容易 当列表框被数据绑定到数据表时(假定列表框中的有些行当前被选定了) 列表框的SelectedItem属性保存了一个DataRowView对象

这意味着我们能把列表框的SelectedItem属性转换到DataRowView对象 这就是上面代码中的第二行实现的 接着DataRowView暴露一个Row属性 它指向被包装的数据行 上面的代码声明了一个数据行并设置了Row属性

转换对象的类型以访问它的接口的技术在Visual Basic 中不是经常使用 但是在Visual Basic NET中这是经常的 有了上面的例子后 大多数有经验的开发者迅速跟上了这种技术

数据行的引用(dr)可用于用任何方式维护行 访问数据行中的任何特定字段是可行的 行中的数据可以被改变 能使数据行的Delete方法把该行标识为删除 或者从数据表的行集合中删除该行 下面的代码标识删除了一行

dr Delete()

lishixinzhi/Article/program/net/201311/12974

首先调试跟踪 datasetTables["task"]Rows 是否有行,即是否查出了数据。如果datasetTables["task"]RowsCount > 0, 那么问题应该出现在 DataTable 的主键问题上,虽说你的数据库中设置了 taskId 为主键,但是查出来的 DataSet中的Table默认是没有主键的,因此使用Find方法是找不到数据的。

解决办法:在使用 Find 方法之前,为DataTable设置主键,例如:

DataTable table = datasetTables["task"];

tablePrimaryKey = new DataColumn[] { tableColumns["taskid"] };

DataRow row3 = tableRowsFind(1);

以上就是关于C#datatable的问题,datatable1(dt1)主表datatable2(dt2)次表全部的内容,包括:C#datatable的问题,datatable1(dt1)主表datatable2(dt2)次表、DataRow dataRow = dt.Rows.Find()、c# 通过Datatable对象,遍历这个对象中DataRowCollection中的数据等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/web/9432388.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-04-28
下一篇2023-04-28

发表评论

登录后才能评论

评论列表(0条)

    保存