
本质上就是取 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中的数据等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)