2017-08-28 5 views
0

私は新しい値を挿入しようとしているグリッドビューを持っています。挿入を行う前に、入力された値がすでにDBに存在するかどうかを確認する必要があります(複製できない)。 重複をチェックする必要がある列は、文字列内の最大文字を受け入れることができるvarchar型です(空白を含むことができ、他の特殊文字も使用できます - 基本的には文です)。 など。特定のジョブ関連の影響を挿入します(たとえば、顧客またはクライアントサービスへの影響) この列は、varchar(max)として宣言されているため、SQLサーバーで一意にすることはできません。 C#からこのような大きな文字列をチェックできますか?C#では重複した値が入力されたかどうかを確認できます

+0

をTheTable WHERE TheField = @ MyUniqueValue'から 'SELECT COUNT(*) 'を実行し、挿入する前に結果> 0が得られるかどうかを調べることができます。問題は 'VARCHAR(MAX)は索引付けできないため、潜在的に非常に遅い可能性があります。 –

+0

このアプローチを先に試して、行数を取得しました。しかし、入力が一致しても、カウントは常に「0」なので、レコードを挿入しています。 – Van

+0

それは私には分かりません。使用していたコードを表示できますか? –

答えて

0

主要概念は次のとおりです。しかし、あなたはAJAX呼び出しを行う必要があるだろう

ウェブサイトで
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 
       } 
      } 
     } 
    } 

、そのいずれか、使用しているのDataTable、DataGridViewののCellValueChangedに似ただろうそのイベントを見つけますイベント。そうしないと、HTML要素定義にonchanged = ""タグを追加してみてください。 <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 
    } 
関連する問題