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はこんなかんじで列を追加しておく
DataGridViewの名前の列のプロパティでDataPropertyNameを「uName」にしておく。
// 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);
}