【问题标题】:DataTable: Check a column for existing valueDataTable:检查现有值的列
【发布时间】:2018-10-02 09:56:42
【问题描述】:

我有两个 DataTables,DataTable1 将它的一些值发送到 DataTable2。我想要做的是,如果 DataTable1 的值已经存在于 DataTable2 中,这些值将不会添加到 DataTable2。

我这里有来自 DataTable1 的值

protected void ASPxGridView1_CustomButtonCallback(object sender, ASPxGridViewCustomButtonCallbackEventArgs e)
{
    if (e.ButtonID != "ADD") return;
    int id = e.VisibleIndex

    int DeliveredQty = Convert.ToInt32(ASPxGridView1.GetRowValues(id, "Delivered Qty"));
    int InventoryID = Convert.ToInt32(ASPxGridView1.GetRowValues(id, "InventoryID"));

现在我想检查 DataTable2 的值是否存在InventoryID 行中。

这就是我的结局

int id = InventoryID;

DataTable dt = DataTable2;
DataRow[] dr = dt.Select(id.ToString());

if (dr == null)
{ 
    "if it does not exist, values will be addded"
}
else
{
    "prompt user that values exist"
}

这样做的正确方法是什么?

【问题讨论】:

  • 您可以将Contains 用于第二个DataRow,但避免将整个DataTable 实例存储在ViewState 中,因为它会减慢页面加载速度。
  • @TimSchmelter 道歉,标题误导了,我已经修复了
  • @TetsuyaYamamoto 感谢您提出 Contains 方法的建议,但我无法理解它(谷歌根本没有帮助)。

标签: asp.net datatable


【解决方案1】:

您可以使用 Linq 检查 DataTable 列中的值

bool valueExists = dt.AsEnumerable().Any(x => x.Field<string>("ColumnName") == "abcd");

【讨论】:

  • 谢谢。它有效,但在从“确定”按钮(在模式弹出窗口内)回发后,条件不再有效。我只能使用一次。
  • 否,但在回发后数据表可能为空,因此您需要重新加载它。
  • 重新加载网格视图?我在单独的updatePanel中有模态弹出窗口和gridview的内容,在模态弹出窗口中的“确定”按钮触发它还执行GridViewName.DataBind()的方法之后。
  • 不,不要重新加载gridview,但根据您的需要,您可能需要重新加载源数据来进行数据比较。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-04-09
  • 2010-10-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多