記録として残しておきたいブログ

主にプログラミングについて書きます

c# コメビュ作成 予約管理機能をつける(予約を追加する)

ニコ生のアンコちゃん(?)には予約管理機能がついてるらしい。

ツイキャスでもその機能使いたい!ってことでつくちゃいましょ~~

 

※メモ的なものなので自分がわかるように書いてあります

 

 

取り消しはまた今度書きます

 

 

message userid nameはJsonでとってきたデータです

基本的には「/yoyaku」または「/予約」というコメントがあったら予約欄に追加するという感じです。

DataSetとDataTableをはじめて使ってみた。DataGridViewとは相性がよさそうだった。でも、コメントのほうを今から変える気にはならない。

参考サイト:とてもためになりました。

手動で DataSet を作成して、DataGridView と ListBox に登録する - とある社員のチラシ裏

 

// cls_dataget.cs
public ArrayList userList = new ArrayList();
public ArrayList idList = new ArrayList();
public bool yo = false; // メインフォームで使う予約コメフラグ


public void commeDisplay()
{
// ここでnew忘れずに
userList = new ArrayList();

if (message == "/yoyaku" || message == "/予約")
{
if (idList.Count != 0)
{
if (idList[0] != null)
{
for (int u = 0; u <= idList.Count - 1; u++;)
{
if (idList[u] != userid)
{
      // リストに追加、フラグ立てる
userList.Add(name);
idList.Add(userid);
yo = true;
}
}
}
}
else
{
   // リストに追加、フラグ立てる
userList.Add(name);
idList.Add(userid);
yo = true;
}
}
}

 

MainFormの DataGridViewはこんなかんじで列を追加しておく

f:id:tmg1998:20160209141134p:plain

DataGridViewの名前の列のプロパティでDataPropertyNameを「uName」にしておく。

 f:id:tmg1998:20160209140842p:plain

// MainForm.cs

cls_dataget dget = new cls_dataget();

DataGet data_set;
DataTable data_table;

private vid MainForm_Load(object sender, EventArgs e)
{
// データセットの作成
 data_set = new DataSet();

// データテーブルの作成
 data_table = new DataTable();

// データテーブルをデータセットに登録
 data_set.Tables.Add(data_table);

// データテーブルにカラムを作成・登録
 data_table.Columns.Add("uname", Type.GetType("System.String"));

// データテーブルの主キーを設定
 data_table.PrimaryKey = new DataColumn[] { data_table.Columns["uName"];

}

}

private void Timer1_Tick(object sender, EventArgs e)
{
 // 予約コメが来ていないか監視する
dget.commeDisplay();

 // 予約コメフラグが立っていたら予約できるか確認する
if (dget.yo)
{
yoyaAdd(dget.userList,dget.idList);
dget.yo = false;
}
}

private void yoyaAdd( ArrayList uList, ArrayList idList)
{
// uListに1つでも値が入っているとき
if (uList.Count > 1)
{
for (int a = 0; a < uList.Count; a++)
  {
int cnt = 0;
var RowsC = dataGridView1.Rows.Count;

   // DataGridViewの横の列が1つでもあるとき比較してから入れる
   // 重複して同じ値を入れることができないから比較する 
if (RowsC != 0)
{
for (int i = RowsC - 1; i >= 0; i--)
{
     // .ToString() で文字列に変換しないと比較できない!!!
     // 予約している人は予約に入れられないようにする
// data_table[i][j]で指定したところにアクセスできる
if (data_table[i][0].ToString() != uList[a].ToString())
{
      // 行数と同じだったら(一回も重複してないってこと)予約受け付ける
cnt++;
if (Rows == cnt) DataAdd(uList, a);
}
}
}
   // まだ予約入ってなかったら比較できないから入れちゃう
else DataAdd(uList, a);
}

// dataGridView1にデータセットを設定
  dataGridView1.DataMember = data_set.Tables[0].TableName;
dataGridView1.DataSource = data_set;
}
}

private void DataAdd(ArrayList uList, int a)
{
DataRow data_row;

//データ行の作成をテーブルへの登録
 data_row = data_table.NewRow();
data_row["uName"] = uList[a];

data_table.Rows.Add(data_row);
}