我有一个网格视图,我正在尝试插入一个新值。在进行插入之前,需要检查输入的值是否已存在于DB中(不能重复)。 需要检查重复的列是varchar类型,它可以接受字符串中的最大字符(它可以有空格,也可以有其他特殊字符 - 它基本上是一个句子)。 例如。插入与工作相关的特定影响:(例如,对客户或客户服务的影响) 我们无法使此列在SQL Server中唯一,因为它被声明为varchar(max)。 我们可以从C#中检查这样的大字符串吗?
答案 0 :(得分:0)
主要概念如下:
private void dataGridView1_CellValueChanged_1(object sender, DataGridViewCellEventArgs e)
{
int columnToCheck = 0;//The index of the property/field/column you want to check
if (e.ColumnIndex == columnToCheck)
{
using (var DB = new DataContext())
{
if (DB.YourTable.Where(v => v.id == dataGridView1.Rows[e.RowIndex].Cells[e.ColumnIndex].Value.ToString()).Count > 0)
{
dataGridView1.Rows[e.RowIndex].Cells[e.ColumnIndex].Value = "";
MessageBox.Show("This key already exists");
//Return the error message to your javascript in asp.net here
}
}
}
}
然而,在网站中,您必须进行ajax调用,因此无论您使用哪个数据表,都要查找与dataGridView的CellValueChanged事件类似的事件。如果您没有这样做,请尝试将onchanged =“”标记添加到其HTML元素定义中,例如<table class="table" id="tab" onchanged="eventfunction(this)"></table>
并在您的javascript中按以下方式处理呼叫:
function eventfunction(element)
{
//Use an ajax call to your controller from here
var id = document.getElementById(element.id).innerText; //or however you can obtain the active cells' value
$.ajax({
url: "/api/ControllerName/ActionName",
method: "POST",
data: id,
success: function (response)
{
//Handle the return call here
},
error: function (response)
{
//Or here if you return an error message
}
});
}
或者您可以像这样使用jQuery的事件处理:
$("#tab").on("onchange", function()
{
//Your code here
});
您的控制器可能如下所示:
[HttpPost]
public Customer GetCustomer(string id)
{
//LINQ Where validation here
}